ELK部署流程和常见问题分析

ELK部署流程和常见问题分析

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

参考文章:https://blog.csdn.net/embbls/article/details/81388439 https://www.cnblogs.com/kevingrace/p/5919021.html

我们从空服务器去部署,操作系统linux centos7 64

第一步

先在官网down各种安装包-elasticSearch, logstash, kibna,并放在同一目录方便管理,这里楼主将文件放在了/home/elk下,官网:https://www.elastic.co/downloads

配置环境安装jdk node js ,git

JDK配置

1、先下载tar.gz的压缩包, 进入官网下载: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

在这里插入图片描述 选择这一个下载;
下载后打开命令行,切换到/usr/local/路径下,新建/usr/local/java文件夹,已有请忽略,然后将下载好的文件放在这个文件夹下,输入tar -zxvf 文件名去解压
cd /usr/local
mkdir java
tar -zxvf jdk-8u201-linux-x64.tar.gz
解压完成后去添加环境变量
vim /etc/profile
打开文件后 按下 i 进入编辑模式
在文件的最后输入
export JAVA_HOME=/usr/local/java/jdk1.8.0_161 //这里的是你文件名称
export CLASSPATH= : C L A S S P A T H : :CLASSPATH: JAVA_HOME/lib/
export PATH= P A T H : PATH: JAVA_HOME/bin
然后按下Esc按钮 输入:,再输入wq(保存退出的意思) 回车退出后
输入 source /etc/profile
执行配置文件时环境变量生效
最后输入 java -version 验证
在这里插入图片描述

Node Js 配置

在node js 官网下载最新的linux包 网址:https://nodejs.org/en/

在这里插入图片描述
在这里插入图片描述
下载好后,放到服务器,输入tar -zxvf 文件名进行解压
xz -d node10.tar.zx
tar -xvf node10.tar
解压完成后去添加环境变量
vim /etc/profile
打开文件后 按下 i 进入编辑模式
在文件的最后输入
export PATH=/home/elk/node10/bin //填写文件所在旅行
然后按下Esc按钮 输入:,再输入wq(保存退出的意思) 回车退出后
输入 source /etc/profile
执行配置文件时环境变量生效
最后输入 node -v 验证
在这里插入图片描述

安装git

直接在命令行里输入 yum install git 然后等待安装完成

下载elastichsearch-head插件

下载地址:https://github.com/mobz/elasticsearch-head 直接在命令行里输入 git clone https://github.com/mobz/elasticsearch-head.git (和其他包放在同一个文件夹,方便管理)

下载elasticSearch, logstash, kibna

官网:https://www.elastic.co/downloads

在这里插入图片描述
下载完成解压到统一文件夹
tar -zxvf elasticsearch-6.7.0.tar.gz
tar -zxvf kibana-6.7.0-linux-x86_64.tar.gz
tar -zxvf logstash-6.7.0.tar.gz
打开 elasticsearch-6.7.0 进入config 文件夹 根据当前设备的内存设置内存
在这里插入图片描述
默认是1G的,如果启动不了就得改得更小一点,
然后打开 elasticsearch.yml 文件
vim elasticsearch.yml
输入一下参数或者把这些参数的注释符号去掉
cluster.name: huanqiu # 组名(同一个组,组名必须一致)
node.name: elk-node1 # 节点名称,建议和主机名一致
path.data: /data/es-data # 数据存放的路径 可自定义 请先把文件建好
path.logs: /var/log/elasticsearch/ # 日志存放的路径 可自定义 请先把文件建好
bootstrap.mlockall: true # 锁住内存,不被使用到交换分区去
network.host: 0.0.0.0 # 网络设置
http.port: 9200 # 端口

一般还需要修改虚拟机内存,操作如下:
vim /etc/sysctl.conf 添加下面这一行
vm.max_map_count=262144
并执行命令:sysctl -p

第二步

前面的配置都ok了以后,打开elastichsearch-head插件所在文件夹

输入npm install 中间会有些错误提现,可以忽略,然后等待安装完成

安装完成后输入npm install [email protected] --ignore-scripts 接着安装
安装完成后输入npm run start
在这里插入图片描述
出现这个就说明head插件已启动成功
在浏览器内输入 http://119.3.89.10:9100/ 这里的ip切换成为你服务器的ip
在这里插入图片描述
这里插件就已经正常启动了

由于Elasticsearch可以接收用户输入的脚本并且执行,为了系统安全考虑,不允许root账号启动,所以建议给Elasticsearch单独创建一个用户来运行Elasticsearch。
如果你当前是root账户就会出现以下错误提示
在这里插入图片描述
新建一个用户
命令格式 useradd ymq(用户名) -g ymq(所属组名) -p ymq(密码)
先输入groupadd elk(组名) 新建一个用户组
useradd elk1(用户名) -g elk(所属组名) -p 123456(密码) 新增一个用户
这里还需要给这个用户一个权限,不然它没有权利去执行Elasticsearch
会出现java.nio.file.AccessDeniedException 权限拒绝错误
在这里插入图片描述
授权命令格式: chown -R elk1(所属用户) : elk(所属用户组名) /elk/elasticsearch-6.7.0 (要更改的文件路径)
我这里是输入 chown -R elk1 : elk /elk/elasticsearch-6.7.0
注意:还需给普通用户elasticsearch.yml文件夹下
path.data: /data/es-data # 数据存放的路径 可自定义 请先把文件建好
path.logs: /data/log/elasticsearch/ # 日志存放的路径 可自定义 请先把文件建好
这两个参数的文件权限 格式如上
然后再切换至普通账号 su elk1
然后到elasticsearch-6.7.0 所在文件夹进入 bin目录
输入./elasticsearch
在这里插入图片描述
就search启动成功啦
验证下可以
成功的截图如下:
在这里插入图片描述

启动中你有可能会遇到以下问题:
(坑1:
[***]failed to send join request to master
原因:你复制了某个节点的elasticsearch文件夹,但是这里面包含了该节点的data文件
解决:删除elasticsearch文件夹下data目录的内容

坑2:
ERROR: bootstrap checks failed
memory locking requested for elasticsearch process but memory is not locked
原因:锁定内存失败
解决:vim /etc/security/limits.conf 添加下面两行

  • soft memlock unlimited
  • hard memlock unlimited
    tips:* 代表的是linux内所有的用户

坑3:
ERROR: bootstrap checks failed
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
原因:无法创建本地文件,用户最大可创建文件数不够
解决:vim /etc/security/limits.conf

*                hard    nofile          65536
*                soft    nofile          65536
*                soft    nproc           65536
*                hard    nproc           65536

坑4:
max number of threads [1024] for user [es] is too low, increase to at least [2048]
原因:无法创建本地线程问题,用户最大可创建线程数太小
解决:vim /etc/security/limits.d/90-nproc.conf

  • soft nproc 2048(这边原本是1024)

坑5:
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
原因:最大虚拟内存太小
解决:vim /etc/sysctl.conf 添加下面这一行
vm.max_map_count=262144
并执行命令:sysctl -p

坑6:
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
原因:Centos6不支持SecComp
解决:vim elasticsearch.yml 切记在内存锁的下面加
bootstrap.memory_lock: false
bootstrap.system_call_filter: false

坑7:
uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
原因:elasticsearch不能使用root用户启动
解决:创建新用户(useradd elasticsearch)并 chown -R elasticsearch:elasticsearch elasticsearch-5.2.2 [更改elasticsearch文件夹的用户以及所属组]

坑8:
unable to install syscall filter:
java.lang.UnsupportedOperationException: seccomp unavailable: requires kernel 3.5+ with CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER compiled in
at org.elasticsearch.bootstrap.SystemCallFilter.linuxImpl(SystemCallFilter.java:350) ~[elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.bootstrap.SystemCallFilter.init(SystemCallFilter.java:638) ~[elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.bootstrap.JNANatives.tryInstallSystemCallFilter(JNANatives.java:215) [elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.bootstrap.Natives.tryInstallSystemCallFilter(Natives.java:99) [elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:111) [elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:204) [elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:360) [elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) [elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114) [elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) [elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) [elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.cli.Command.main(Command.java:88) [elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) [elasticsearch-5.4.0.jar:5.4.0]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) [elasticsearch-5.4.0.jar:5.4.0]
原因:linux内核版本太低
解决:凉凉,换个新版本的linux系统吧。

坑9:
Unsupported major.minor version 52.0
原因:java版本太低
解决:更换jdk版本,ElasticSearch5.0.0支持jdk1.8.0以上

坑10:
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: Property [elasticsearch.version] is missing for plugin [head]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.cli.SettingCommand.execute(SettingCommand.java:54) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.cli.Command.main(Command.java:88) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:89) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:82) ~[elasticsearch-5.2.2.jar:5.2.2]
Caused by: java.lang.IllegalArgumentException: Property [elasticsearch.version] is missing for plugin [head]
at org.elasticsearch.plugins.PluginInfo.readFromProperties(PluginInfo.java:104) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.plugins.PluginsService.getPluginBundles(PluginsService.java:292) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.plugins.PluginsService.(PluginsService.java:131) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.node.Node.(Node.java:297) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.node.Node.(Node.java:232) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.bootstrap.Bootstrap$6.(Bootstrap.java:241) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:241) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-5.2.2.jar:5.2.2]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:121) ~[elasticsearch-5.2.2.jar:5.2.2]
… 6 more
原因:elasticsearch新版本是不允许安装插件在文件目录plugins下面的
)参考:https://blog.csdn.net/u013641234/article/details/80792416
PS:.当重启服务器之后发现依旧如连接不成, 还是无法正常连接到elasticsearch服务,这是因为elasticsearch服务与elasticsearch-head之间可能存在跨越,修改elasticsearch配置即可,在elastichsearch.yml中添加如下命名即可:http.cors.enabled: true
http.cors.allow-origin: “*”
或者检查下第一步里面的配置时否写好了
注意请给普通用户 在第一步中配置路径的权限

第三步

启动 logstash

配置logstash环境变量 vim /etc/profile 在文件底部加上 export PATH=$PATH:/home/elk/logstash-6.7.0/bin 然后保存退出 操作如→ Esc - : - wq - 回车 输入 source /etc/profile 使其生效 打开logstash所在目录 进入config配置文件夹 编辑配置文件 vim logstash.yml 把http.host http.port log.level 的注释去掉 保存后回到bin目录下 其他配置信息 node.name: 节点名称,便于识别 path.data: 持久化存储数据的文件夹,默认是logstash home目录下的data path.config: 设定pipeline配置文件的目录(如果指定文件夹,会默认把文件夹下的所有.conf文件按照字母顺序拼接为一个文件) path.log: 设定pipeline日志文件的目录 pipeline.workers: 设定pipeline的线程数(filter+output),优化的常用项 pipeline.batch.size/delay: 设定批量处理数据的数据和延迟 queue.type: 设定队列类型,默认是memory queue.max_bytes: 队列总容量,默认是1g

配置参数详细介绍参考这位大神的博客,想详细了解的可以去看看https://blog.csdn.net/len9596/article/details/82884507
启动方式:
-e :指定logstash的配置信息,可以用于快速测试;
-f :指定logstash的配置文件;可以用于生产环境;
通过-e参数指定logstash的配置信息,用于快速测试,直接输出到屏幕。–quiet:日志输出安静模式
$ logstash -e “input {stdin{}} output {stdout{}}” --quiet

通过-f参数指定logstash的配置文件,可以用于生产环境
新建 log.conf文件
log.conf文件里的内容:

input {
  file {
    type => "hadoop-yarnlog"
    path => "/usr/local/hadoop/logs/yarn-hadoop-resourcemanager-m000.log"
  }
}

output {
  elasticsearch {
    hosts => "m000:9200"
    index => "logstash-%{type}-%{+YYYY.MM.dd}"
    template_overwrite => true
  }
} 

logstash -f log.conf

最后推荐一部logstash使用说明和详解,喜欢的小伙伴可以去了解下https://blog.csdn.net/wfs1994/article/details/80862225

kibana启动

这个就比较简单的不需要配置什么,把5601端口开放出来后,到bin目录下,输入 ./kibana 即可运行

温馨提示

楼主在使用过程中发现shell启动窗口关闭了服务也就关闭了,所以友情推荐一篇文章https://www.cnblogs.com/cute/p/5015852.html这位大神讲了关于screen的使用,对你很有帮助哟

测试使用流程

上述搭建好以后 在logstash文件夹下新建一个文件log.conf ,名字可以任意,编辑文件输入
input{
      stdout{ 
    }
}

filter{

}

output{
    elasticsearch {
      index => "flow-%{+YYYY.MM.dd}"
      hosts => ["localhost:9200"]
    }

    stdout{
        codec => rubydebug
    }
} 

上面的意思是输入为logstash终端,输出到本地9200端口索引为flow加上当前时间

发布了36 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41392105/article/details/88976051
今日推荐