前言
由于初期系统日志量还在可控范围,选择 ELK+Beats 的方案,并未引入消息队列,后续根据需求可以对系统升级。由此,只需要在日志平台部署 Elasticsearch 和 Logstash 集群,同时在应用服务器部署 Filebeat即可。
ELK版本务必保持一致,否则可能会出现 Kibana server is not ready yet的情况。
警告:
ELK 版本 7.4.X 以上需要 Java11 版本
ELK 版本 6.6.0 可以使用 Java8 版本
因此我们使用 6.6.0 版本
1 安装前准备
JAVA环境
ELK 需要 JAVA 8 以上的运行环境,若未安装则按如下步骤安装:
1 | # 查看是否安装 |
在文件/etc/profile
配置环境变量:
1 | # 指向安装目录,其中1.8.0.151需与版本号保持一致 |
执行source /etc/profile
命令,使配置环境生效
安装GPG-KEY
由于后续采用 yum 安装,所以需要下载并安装 GPG-KEY:
1 | rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch |
yum 命令会安装最新的版本,若需安装较旧的版本,请先从 官方地址 下载对应的旧版本 rpm 包,然后使用
rpm -ivh
命令安装。
2 Elasticsearch
安装
1 如果网速过慢,可以选择笔记附件下载。
2 通过 官方地址 下载选择最新版本,然后解压:
1 | wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.tar.gz |
1 | 目录结构介绍: |
由于 Elasticsearch 新版本不允许以 root 身份启动,因此先创建 elk 用户。
1 | 直接以root用户启动 会报错 |
所以需要创建用户并赋予es安装目录权限
1 | 创建一个esroot用户并设置初始密码 |
可能出现的错误:
- 1 jvm 的 Xms / Xmx 设置不一致,将其设置一致即可
启动前,需要修改配置文件jvm.options
中 JVM 大小,否则可能会内存溢出,导致启动失败。
1 | cd elasticsearch |
2 要设置系统参数vm.max_map_count=262144
原话为:
https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html#docker-cli-run-prod-mode
The vm.max_map_count kernel setting needs to be set to at least 262144 for production use. Depending on your platform:Linux
The vm.max_map_count setting should be set permanently in /etc/sysctl.conf:
To apply the setting on a live system type: sysctl -w vm.max_map_count=262144
$ grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144
解决办法:
切换为root用户
1 |
|
简要配置
1-5为elasticsearch.yml配置,6为jvm.options配置
1 配置集群名称(默认备注是,并且默认只有一个集群名)
2 配置当前es节点名称(默认是被注释的,并且默认有一个节点名)
3 配置存储数据的目录路径(用逗号分隔多个位置)和日志文件路径
4 绑定地址为特定IP地址(设置0.0.0.0可以让任何人访问到你的es),设置一个http请求端口
添加一行为 http.host: 0.0.0.0 即可。5 集群启动,参看同目录其他文章。
6 配置ES启动JVM参数
CentOS7 设置开机启动服务,启动 Elasticsearch,其默认监听 9200 端口。\
1 | vi /etc/security/limits.conf |
在/etc/systemd/system目录下创建elasticsearch.service文件
1 | [Unit] |
设置开机自启
1 | systemctl enable elasticsearch |
最后,安装使用到的插件 可能需要用到 Java11版本,看情况安装下述插件
1 | cd /usr/local/geek/elk/elasticsearch |
安装 x-pack 插件后,对 Elasticsearch 的操作都需要授权,默认用户名为 elastic,默认密码为 changeme。
启动成功图:-d 以后台方式启动
问题及解决办法
1 权限问题
1 | Java HotSpot(TM) 64-Bit Server VM warning: Cannot open file logs/gc.log due to Permission denied |
解决方法:
因为第一次启动不小心用了root启动,导致用root生成了对应的文件。切换es账号之后,没有对应文件的权限导致,删除相关的东西即可。
1 | rm -rf elasticsearch.keystore gc.log.0.current |
2 #### max number of threads [1024]
1 | RROR: [2] bootstrap checks failed |
解决:
1 | ulimit -a |
3 system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
这是在因为Centos6不支持SecComp,而ES5.2.0默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
解决:
1 | 在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面: |
4 日志级别报错
需要修改config配置里的log4j2.properties 文件, 将 logger.deprecation.level = warn 改为 error即可。
5 # main ERROR Unable to invoke factory method in class org.apache.logging.log4j.core
原因:在安装elasticsearch时,新建的logs目录是用root用户建的,因此,logs下的文件是root用户权限,因此,将该权限改为非root用户即可
1 | chown -R esroot logs/ |
再次启动,不会报错。
3 Kibana
下载kibana安装包
如果网速过慢,可以选择笔记附件下载。
1 | wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.0-linux-x86_64.tar.gz |
解压kibana安装包
1 | mkdir -p /usr/local/geek/elk |
修改kibana配置,config目录下的kibana.yml
1 | vim /usr/local/geek/elk/kibana/config/kibana.yml |
安装常用插件,如 x-pack
1 | bin/kibana-plugin install x-pack |
安装 x-pack 插件后,访问 Kibana 同样需要授权,且任何 Elasticsearch 的用户名和密码对都可被认证通过。
启动 kibana
1 | cd bin |
踩坑
- 1 网络不可访问解决方案:
1
{“type”:“error”,"@timestamp":“2019-04-06T00:25:22Z”,“tags”:[“fatal”,“root”],“pid”:754,“level”:“fatal”,“error”:{“message”:“listen EADDRNOTAVAIL localhost:5601”,“name”:“Error”,“stack”:"Error: listen EADDRNOTAVAIL localhost:5601\n at Server.setupListenHandle [as _listen2] (net.js:1343:19)\n …
由于server.host: 之前设置的是阿里云服务器的外网ip地址,所以启动kibana一直报错 将server.host改为”内网地址或者是0.0.0.0”即可
- 2 Kibana 运行时 NodeJs 默认会最大分配 1G 内存,可以在启动时增加
max-old-space-size
参数,以限制其运行内存大小
同理:kibana not ready yet
同理:kibana FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of
1 | vim bin/kibana |
防护墙开放5601端口,并测试访问
1 | firewall-cmd --zone=public --add-port=5601/tcp --permanent |
访问 http://192.168.121.100:5601/app/kibana 即可
4 Logstash
安装
- 方法1
首先,在/etc/yum.repos.d
目录下创建logstash.repo
文件:
1 | [logstash-6.x] |
使用 yum 安装 Logstash,并测试:
1 | # 安装logstash 6.x |
- 方法2
按上述连接安装,如果网速过慢,可以使用笔记附件安装
1 | mkdir -p /usr/local/geek/elk |
安装插件(可能需要一些时间)
1 | bin/logstash-plugin install logstash-input-jdbc |
修改 JVM 内存大小,防止出现内存溢出异常:
1 | $ vim config/jvm.options |
目录结构
1 | 如果没有 logs文件夹,则自己创建 |
检验安装是否成功
1 | bin/logstash -e 'input { stdin { } } output { stdout {} }' |
-e 即允许从命令行指定配置
启动成功后,输入 hello world,会有如下显示,则安装成功。
5 Filebeat
[安装]
1 网速较慢,使用笔记附件安装
2 使用 wget 下载
1
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.0-linux-x86_64.tar.gz
解压
1 | mkdir -p /usr/local/geek/elk |