项目中的日志系统使用的是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 & |