项目中的日志系统使用的是ELK(elasticsearch + logstash + filebeat),其中filebeat负责从每个服务器的日志文件中提取数据并发送给logstash,logstash负责数据过滤并存储到es,es负责数据存储和提供查询。
整个搭建与配置过程比较繁琐,想着在这里记录一下,以便不时之需。
本次部署版本5.6.3,各组件版本号需要保持一致,否则可能会出问题。
elasticsearch
部署
下载
wget下载,或者去elastic.co下载
| 1 | wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.tar.gz | 
解压
| 1 | tar -zxvf elasticsearch-5.6.3.tar.gz -C | 
配置
修改配置文件config/elasticsearch.yml
| 1 | # ---------------------------------- Cluster ----------------------------------- | 
创建用户
| 1 | useradd elastic | 
修改目录权限
| 1 | chown -R elastic:elastic /usr/share/elasticsearch | 
启动
切换到elastic用户,后台启动
| 1 | su elastic | 
问题
问题1
直接启动,报错

原因是用户最大可创建文件数太小
解决:vi /etc/security/limits.conf,改为

问题2
启动后可能继续报错
可能是limits.conf的hard nofile被覆盖掉了,查询
| 1 | [root@192 log]# ulimit -Hn | 
修改
| 1 | ulimit -Hn 131072 | 
修改limits.conf后退出elastic用户,必须要重新登录才能生效
问题3
启动报No factory method found for class org.apache.logging.log4j.core.appender.RollingFileAppender,原因是es日志 /var/log/elasticsearch 被改成了root属主,需要改为elsatic

问题4
重启es后没有日志。
昨天改了下config/elasticsearch.yml文件的network.host: 127.0.0.1,重启es后居然没日志了。恢复后也不行。尝试把logstash和filebeat都重启了一遍,还是不行。奔溃了o(╥﹏╥)o
最后尝试改了下权限,重启es
| 1 | chmod 755 elasticsearch.yml | 
居然就行了。原因暂时没找到,先记录下。
elasticsearch-head-chrome
谷歌浏览器插件安装(推荐)。安装非常方便,实现效果和**elasticsearch-head**(服务端安装)相同,可以连任意es服务端。缺点是每台pc都得装。
下载
github下载源码,解压到任意目录。
安装
打开chrome扩展程序,将文件夹拖入

访问
点击详情,复制ID

拼接ID后浏览器访问 chrome-extension://ID/elasticsearch-head/index.html 即可
chrome :
| 1 | chrome-extension://nmgdkhimpecfkhelpllodoacogdgaaac/elasticsearch-head/index.html | 
edge :
| 1 | extension://nmgdkhimpecfkhelpllodoacogdgaaac/elasticsearch-head/index.html | 
或者直接打开本地文件 C:/chromePlugin/elasticsearch-head-chrome-master/elasticsearch-head/index.html
elasticsearch-head
安装
下载
下载插件elasticsearch-head-master.zip
wget下载,或者去github下载
| 1 | wget https://github.com/mobz/elasticsearch-head/archive/master.zip | 
windows下,解压后直接点击index.html即可打开
解压到es平级目录
| 1 | unzip -d /usr/share elasticsearch-head-master.zip | 
安装node
head插件需要node.js支持,先安装node
官网下载node-v12.18.1-linux-x64.tar.xz
| 1 | tar xf node-v12.18.1-linux-x64.tar.xz | 
vim /etc/profile,最后加上
| 1 | export PATH=$PATH:/usr/share/nodejs/bin | 
立即生效
| 1 | source /etc/profile | 
创建软链
| 1 | ln -s /usr/share/nodejs/bin/node /usr/bin/ | 
检查
| 1 | [root@svr195 /]# node -v | 
安装grunt
3.1 在线安装
Grunt 依赖 Node.js,安装 Grunt-cli 需要使用 NPM。实际上,安装的并不是 Grunt,而是 Grunt-cli,也就是命令行的 Grunt
-g 表示全局范围
| 1 | npm install -g grunt-cli | 
3.2 离线安装
github官网下载源码
修改Gruntfile.js
| 1 | vim /usr/share/elasticsearch-head-master/Gruntfile.js | 

修改es连接地址
默认是本机9200端口
| 1 | vim /usr/share/elasticsearch-head-master/_site/app.js | 

启动
后台启动grunt
| 1 | cd /usr/share/elasticsearch-head-master | 
页面可以访问了
| 1 | http://ip:9100/ | 
停止
先 ps -ef | grep grunt 或 lsof -i:9100,再 kill -9 pid

问题
问题1
grunt启动报错1

原因,node版本过低
| 1 | [root@192 wondertek]# node -v | 
解决:更新nodejs
| 1 | npm install -g n 安装n,n是nodejs管理工具 | 
问题2
grunt启动报错2

原因:本地找不到grunt
解决:尝试在本地安装
| 1 | npm install grunt --save-dev | 
启动,继续报错

解决:安装这几个插件
| 1 | npm install grunt-contrib-clean | 
logstash
下载
下载,解压
| 1 | wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.3.tar.gz | 
新建配置文件
| 1 | vim /usr/share/logstash/test/file_es.conf | 
| 1 | input{ | 
启动
| 1 | cd /usr/share/logstash | 
后台启动
| 1 | nohup ./bin/logstash -f /home/centos/wdvlive/elk/logstash.conf >/dev/null 2>&1 & | 
filebeat
下载
wget下载
| 1 | wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.3-linux-x86_64.tar.gz | 
解压,移动
| 1 | tar -zxvf filebeat-5.6.3-linux-x86_64.tar.gz | 
修改配置文件filebeat.yml
注意:output.logstash.hosts不能填localhost,否则会报DNS解析错误
启动
调试启动,-e关闭日志输出,-c指定配置文件
| 1 | ./filebeat -e -c elk/config/filebeat.yml | 
后台启动,>/dev/null 2>&1 &将所有标准输出及标准错误输出到/dev/null空设备,即没有任何输出
| 1 | nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 & | 



