Linux环境ELK系统搭建

项目中的日志系统使用的是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
2
tar -zxvf elasticsearch-5.6.3.tar.gz -C
mv elasticsearch-5.6.3 /usr/share/elasticsearch

配置

修改配置文件config/elasticsearch.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# ---------------------------------- Cluster -----------------------------------
# Use a descriptive name for your cluster:
cluster.name: transcode-log
# ------------------------------------ Node ------------------------------------
# Use a descriptive name for the node:
node.name: node01
# ----------------------------------- Paths ------------------------------------
# Path to log files:
path.logs: /var/log/elasticsearch/
# ---------------------------------- Network -----------------------------------
# Set the bind address to a specific IP (IPv4 or IPv6):
network.host: 0.0.0.0
# Set a custom port for HTTP:
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"

创建用户

1
2
useradd elastic
passwd 1qazA066

修改目录权限

1
2
chown -R elastic:elastic /usr/share/elasticsearch
chown -R elastic:elastic /var/log/elasticsearch

启动

切换到elastic用户,后台启动

1
2
su elastic
./bin/elasticsearch -d

问题

问题1

直接启动,报错

image-20211008141620562

原因是用户最大可创建文件数太小

解决:vi /etc/security/limits.conf,改为

image-20210929200140962

问题2

启动后可能继续报错

可能是limits.confhard nofile被覆盖掉了,查询

1
2
[root@192 log]# ulimit -Hn
65535

修改

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

image-20211109142507426

问题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扩展程序,将文件夹拖入

image-20211119150100484

访问

点击详情,复制ID

image-20211119150241635

拼接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
2
tar xf node-v12.18.1-linux-x64.tar.xz
mv node-v12.18.1-linux-x64 /usr/share/nodejs/

vim /etc/profile,最后加上

1
export PATH=$PATH:/usr/share/nodejs/bin

立即生效

1
source /etc/profile

创建软链

1
2
ln -s /usr/share/nodejs/bin/node /usr/bin/
ln -s /usr/share/nodejs/bin/npm /usr/bin/

检查

1
2
3
4
[root@svr195 /]# node -v
v12.18.1
[root@svr195 /]# npm -v
6.14.5

安装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

image-20210928201602384

修改es连接地址

默认是本机9200端口

1
vim /usr/share/elasticsearch-head-master/_site/app.js

image-20210928201954444

启动

后台启动grunt

1
2
cd /usr/share/elasticsearch-head-master
grunt server &

页面可以访问了

1
http://ip:9100/

停止

ps -ef | grep gruntlsof -i:9100,再 kill -9 pid

image-20211119144355188

问题

问题1

grunt启动报错1

image-20211008161227791

原因,node版本过低

1
2
[root@192 wondertek]# node -v
v6.17.1

解决:更新nodejs

1
2
3
4
npm install -g n	安装n,n是nodejs管理工具
n latest 安装nodejs的最新版本
PATH="$PATH" 切换nodejs到最新版本
node -v 检查

问题2

grunt启动报错2

image-20211008174432616

原因:本地找不到grunt

解决:尝试在本地安装

1
npm install grunt --save-dev

启动,继续报错

image-20211008174808631

解决:安装这几个插件

1
npm install grunt-contrib-clean

logstash

下载

下载,解压

1
2
3
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.3.tar.gz
tar -zxvf logstash-5.6.3.tar.gz
mv logstash-5.6.3 /usr/share/logstash

新建配置文件

1
vim /usr/share/logstash/test/file_es.conf
1
2
3
4
5
6
7
8
9
10
input{
stdin {}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "yj_index"
}
stdout { codec => rubydebug}
}

启动

1
2
cd /usr/share/logstash
./bin/logstash -f ../test/file_es.conf

后台启动

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
2
tar -zxvf filebeat-5.6.3-linux-x86_64.tar.gz
mv filebeat-5.6.3-linux-x86_64 /usr/share/filebeat

修改配置文件filebeat.yml

注意:output.logstash.hosts不能填localhost,否则会报DNS解析错误

image-20210929160540543

启动

调试启动,-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 &
文章作者: SongGT
文章链接: http://www.songguangtao.xyz/2022/12/16/26.ELK系统搭建/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 SongGuangtao's Blog
大哥大嫂[微信打赏]
过年好[支付宝打赏]