大家好,我是烤鸭:
今天分享一下多服务器的elk搭建。
最新的版本和对应下载地址可以在官网查询到
https://www.elastic.co/cn/products/
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.0-linux-x86_64.tar.gz
我这边的目录是 /opt/web_app/elk/elasticsearch-7.0.0/
tar -zxvf elasticsearch-7.0.0-linux-x86_64.tar.gz
由于es 不允许root账户启动,先创建用户和用户组
groupadd elk
useradd -g elk elk
#添加权限
chown -R elk:elk /opt/web_app/elk/elasticsearch-7.0.0/
elasticsearch.yml 修改内容
cluster.name: test1
node.name: test1-node1
network.host: 0.0.0.0 #允许外网访问
discovery.seed_hosts: ["内网ip"] #集群ip
cluster.initial_master_nodes: ["test1-node1"] #默认节点
su elk
cd /opt/web_app/elk/elasticsearch-7.0.0/
./bin/elasticsearch &
ps -ef|grep elasticsearch
kill pid
启动成功,访问如图:
1、 Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12)
修改 elasticsearch 目录中 config/jvm.options
vim config/jvm.options
#-Xms2g和-Xmx2g 改为 -Xms512m和-Xmx512m
2、 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
vi /etc/sysctl.conf
#添加下面配置:
vm.max_map_count=655360 #单个jvm能开启的最大线程数
sysctl -p
3、 max number of threads [3795] for user [esuser] is too low, increase to at least [4096]
#linux最大线程数(ulimit -u可以查看)
#root用户下进行:
cat /etc/security/limits.d/20-nproc.conf
#注释这两行:(最前面加#)
* soft nproc 2048
root soft nproc unlimited
#在后面加四行:
* soft nproc 5000
* hard nproc 5000
root soft nproc 5000
root hard nproc 5000
4、 max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
vi /etc/security/limits.conf
#用户最大打开文件数(ulimit -n可以查看)
#添加如下内容:
soft nofile 65536
hard nofile 131072
soft nproc 2048
hard nproc 4096
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.0.0-linux-x86_64.tar.gz
#我这边的目录是 /opt/web_app/elk/kibana-7.0.0-linux-x86_64
tar -zxvf kibana-7.0.0-linux-x86_64.tar.gz
更改配置文件:
vi /opt/web_app/elk/kibana-7.0.0-linux-x86_64/config/kibana.yml
server.host: "0.0.0.0"
server.maxPayloadBytes: 1048576000 # 防止日志内容过大,kinaba 自动挂掉
elasticsearch.hosts: ["http://127.0.0.1:9200"] # kinaba 和 es在一台服务器部署的,所以这里是127.0.0.1
./bin/kinaba &
ps -ef|grep node
ps -ef|grep 5601
kill pid
启动成功,如图:
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.0.0.tar.gz
#我这边的目录是 /opt/web_app/elk/logstash-7.0.0
tar -zxvf logstash-7.0.0.tar.gz
vi /opt/web_app/elk/logstash-7.0.0/config/logstash.conf
#输入
input {
beats {
port => 5044
}
}
#过滤器 (可不加,为了看着格式方便)
#filter{
# #去除换行符
# mutate{
# gsub => [ "message", "\r", "" ]
# }
#
# #逗号分割
# mutate {
# split => ["message",","]
# }
#
# #字段里的日期识别,以及时区转换,生成date
# date {
# match => [ "mydate", "MM/dd/yyyy HH:mm:ss" ]
# target => "date"
# locale => "en"
# timezone => "+00:00"
# }
#
# #删除无用字段
# mutate {
# remove_field => "mydate"
# remove_field => "@version"
# remove_field => "host"
# remove_field => "path"
# }
# #将两个字段转换为整型
# mutate{
# convert => { "size" => "integer" }
# convert => { "attachments" => "integer" }
# }
#}
#输出
#不同的服务器,不同的tag,下面用于区分不同的服务器生成不同的index索引
output {
if "test1" in [tags]{
elasticsearch {
hosts => ["http://127.0.0.1:9200"]
index => "etc_manage-%{+YYYY.MM.dd}"
}
}
if "test2" in [tags]{
elasticsearch {
hosts => ["http://127.0.0.1:9200"]
index => "test2-%{+YYYY.MM.dd}"
}
}
}
cd /opt/web_app/elk/logstash-7.0.0/
./bin/logstash -f config/logstash.conf
ps -ef|grep logstash
kill pid
在需要的服务器安装 filebeat
我这里是另外两台服务器。
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.0.0-linux-x86_64.tar.gz
#我这边的目录是 /opt/web_app/elk/filebeat
tar -zxvf filebeat-7.0.0-linux-x86_64.tar.gz
vi /opt/web_app/elk/filebeat/filebeat.yml
paths: #监听的日志路径
- /opt/web_app/logs/*.log
# 和logstash的filter配合使用,filter不配置的话,这个可以不配
#multiline.pattern: ^\[ #必须匹配的正则表达式模式
#multiline.negate: true #定义是否应取消在模式下设置的模式。 默认值为false。
#multiline.match: after
tags: ["test1"] #标签,用于区分不同的服务器来源或者日志来源
output.logstash: #输出到logstash的地址和端口
hosts: ["logstath的ip:5044"]
filebeat 多行日志的处理
https://www.cnblogs.com/toSeek/p/6120778.html?utm_source=itdadao&utm_medium=referral
./filebeat -e -c filebeat.yml &
ps -ef|grep filebeat
kill pid
解决kibana后台服务挂的方法
https://blog.csdn.net/qq_37184313/article/details/79168526
关于老版本kibana进程会挂掉的问题
https://blog.csdn.net/caocao80/article/details/87601513
vi /opt/web_app/sh/check_kibana.sh
kibana_pid_num=`lsof-i:5601 | wc -l`
if[ "${kibana_pid_num}" = 0 ]
then
echo"kibana Down"
cd/opt/Kibana/kibana-5.4.0-linux-x86_64
nohup./bin/kibana >/dev/null &
else
echo"kibana Live"
fi
echo '0 1/1 * * * ? sh /opt/web_app/sh/check_kibana.sh' >> /var/spool/cron/root
https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-configuration.html
首页的 management ——> Index Patterns ——> Create index pattern
如图所示:
创建索引:
不足:
kinaba 频繁挂掉。(可能是内存不足的原因)
启动过慢。
日志丢失。
其他的后续待总结。
开源日志管理最全对比:
https://blog.csdn.net/weixin_33842304/article/details/87636213
借鉴开源框架自研日志收集系统:
https://blog.csdn.net/bigsec/article/details/80110923