ELK+filebeat 日志管理
公司系统开发到一定规模,就必须要进行日志统一管理了,日志统一管理 可方便查询,保存更久时间,也是系统安全一项重要考核指标(一般应用服务器存储少量的日志文件 甚至不存文件,写文件非常耗性能)
此文 通过订阅应用日志文件 存储至elasticsearch ,合适机器资源相对比较宽裕的场景。个人认为,绝大部分应用的机器资源比较宽裕,如要更高性能,可以ELK+redis或kafka
www.elastic.co 网站上已经写得很清楚了,不过是文档是分开的,这里整合一下
1.安装elasticsearch
准备工作:
1.使用root账户新建用户
adduser esuser
2.为账户设置密码
passwd esuser
3.为账户开通权限,加入root组
usermod -G root esuser
4.切换至新用户
su - esuser
5.调整用户最大线程句柄数
ulimit -u 14866
6.调整用户最大打开文件数
ulimit -u 65536
7.调整最大虚拟内存
vi /etc/sysctl.conf
追加如下参数:
vm.max_map_count=265536
fs.file-max = 100000
sysctl -p
开始安装
8.下载tar包
mkdir -p /data/es
cd /data/es
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.3.tar.gz9.解压
tar -xvf elasticsearch-5.6.3.tar
10.修改配置文件
cd elasticsearch-5.6.3/config
vi elasticsearch.yml
新加:
bootstrap.memory_lock: false #不锁定内存
bootstrap.system_call_filter: false #设置不进行filter认证,centos系统有该问题
network.bind_host: 0.0.0.0 #所有IP可访问
11.运行
cd elasticsearch-5.6.3/bin
./elasticsearch &
12.访问
curl 127.0.0.1::9200 (通了就行)
2.安装Kibana
cd /data/es
https://artifacts.elastic.co/downloads/kibana/kibana-5.6.3-linux-x86_64.tar.gz
tar -vxf kibana-5.6.3-linux-x86_64.tar.gz
vi /data/es/kibana-5.6.3-linux-x86_64/config/kibana.yml
找到server.port:5601,去掉注释#
设置server.host:0.0.0.0 (所有网段可访问)
设置elasticsearch.url: "http://localhost:9200"(服务器IP)
启动kibana
kibana-5.6.3-linux-x86_64/bin/kibana &
访问 http://ip:5601/ 能正常打开页面 说明安装完成
3.安装logstash
logstash是专门用来处理日志的,但是比较耗资源,所以不分布在应用服务器
cd /data/es
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.6.3.tar.gz
tar -vxf logstash-5.6.3.tar.gz
vi /data/es/logstash-5.6.3/config/logstash.conf
输入如下表达式:
input {
beats{
port => "5044"
}
}
filter {
}
output {
elasticsearch {
hosts => "http://localhost:9200" #es地址
user => "elastic" #es没有设置账户 删掉这行
password => "changeme" #es没有设置账户 删掉这行
}
编辑 yml配置文件
vi /data/es/logstash-5.6.3/config/logstash.yml
设置 http.host: "0.0.0.0"
启动logstash
logstash-5.6.3/bin/logstash -f logstash-5.6.3/config/logstash.conf & 这里-f指定配置文件
启动后看到9600启动成功代表logstash安装成功
4.安装filebeat
刚前3步ELK都是安装在 单机或者集群上,filebeat则是安装在应用服务器上
filebean(监听日志文件)--------->logstash(日志分析)-------->elasticsearch(索引存储)-------->kibana(展示)
这里我们监听一个shell脚本的文件
vi /data/test.sh
不停将 当前时间+hello 写入test.log文件中
if [ -d "/data/test.log" ];then
echo > test.log
fi
while [ 1==1 ];do
sleep 1
send=`date '+%Y-%m-%d %H:%M:%S'`
echo $send ">>hello" >> test.log
done
启动脚本 /data/test.sh &
tail -f /data/test.log 发现文件在一直刷 说明脚本ok
cd /data/es
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.6.3-linux-x86_64.tar.gz
tar -vxf filebeat-5.6.3-linux-x86_64.tar.gz
配置filebeat
vi /data/es/filebeat-5.6.3-linux-x86_64/filebeat.yml
找到 input_type:log
设置为
- input_type: log
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /data/test.log #要监听的日志 可用通配符 监听多个文件
找到 output.elasticsearch
在前面加上#注释掉
找到output.logstash:
设置为
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"] #logstash的ip
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"
启动filebeat
/data/es/filebeat-5.6.3-linux-x86_64/filebeat &
观察日志 tail -f /data/es/filebeat-5.6.3-linux-x86_64/logs/filebeat
输出类似这样的就对了
t.logstash.published_and_acked_events=30 libbeat.publisher.published_events=30 publish.events=30 registrar.states.update=30 registrar.writes=6
2018-03-07T16:24:36+08:00 INFO Non-zero metrics in the last 30s: libbeat.logstash.call_count.PublishEvents=6 libbeat.logstash.publish.read_bytes=36 libbeat.logstash.publish.write_bytes=1974 libbeat.logstash.published_and_acked_events=30 libbeat.publisher.published_events=30 publish.events=30 registrar.states.update=30 registrar.writes=6
到这里安装完成了
打开kibana客户端
http://ip:5601/
点击discover,可以看到 test.log中的message已经过来了
具体怎么筛选,以及es索引 可以在官网学习 https://www.elastic.co/guide/index.html