当公司达到一定规模,基础日志平台是必不可少的。传统的tail -fn100 xxx.log 只能一次性查看某一台服务器的项目,对于集群项目想定位bug,是一件非常痛苦的事情,
对于一个自动化日志平台至少得有一下几个功能,1、可以根据日期和关键字组合定位日志,2、可以实时跟踪多台服务器的日志类似于tail -fn3、实现权限控制,因为公司不同组别
只允许看到所在组的日志,如果要精细化日志平台的功能开源的elk就需要深度定制了,这篇文章只是记录下elk的简单实用。
ELK文档
ELK是指Elasticsearch,Logstash,Kibana的组合
1、Filebeat:监控日志文件、转发,获取指定路径的日志文件,传输日志文件给Logstash;
文档地址:https://www.elastic.co/guide/en/beats/filebeat/current/index.html
2、Logstash: 日志收集,管理,存储,转发日志给Elasticsearch进行处理;
文档地址:https://www.elastic.co/guide/en/logstash/current/index.html
3、Elasticsearch:搜索,提供分布式全文搜索引擎,搜索是实时进行处理的,对数据进行索引和聚合等;
文档地址:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
4、Kibana :日志的过滤web展示,图形界面话操作日志记录。别名Elasticsearch Dashboard 顾名思义是基于游览器的Elasticsearch分析和仪表盘工具;
文档地址:https://www.elastic.co/guide/en/kibana/current/index.html
ELK流程图
整个流程架构图如上图所示,filebeta用来监控各个日志文件,然后传输给logstash,然后通过logstatsh的过滤和处理
再转发给elasticsearch,然再通过Kibana进行大屏展现。当然在logstatsh到elasticsearch这一步,为了减少elasticsearch的压力
可以在中间再加一层nosql 如kafka或者redis的缓存。
搭建和配置文件记录
- 搭建过程略可参考博客:博客地址一
博客地址二 elk启动顺序
首先启动elasticsearch集群和Kibana ,然后启动Logstash 再启动filebeat
- filebeat配置文件filebeat.yml需要修改的地方
- filebeat.prospectors可以配置多个-input_type节点,这样可以监控不同的目录
- input_type的类型为log时候将会每次读取一行文件
- document_type的值可以为后来的elasticsearch的索引命名
- fields:这个值我们可以自定义变量名称
- output.logstash:配置logstash的端口
filebeat.prospectors:
- input_type: log
paths:
- d:\data\logs\timer_log\pushmsg\pushMsgInfoLog.log
#document_type小写,不然索引不了
document_type: pushmsginfo
fields:
level: debug
- input_type: log
# Paths that should be crawled and fetched. Glob based paths.
paths:
- d:\data\logs\timer_log\pushmsg\pushmsg.log
document_type: pushmsg
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
- logstash的配置文件
- document_type的值等于filebeat.yml里面配置的值
input {
beats {
port => 5044
}
}
filter {
mutate {
# 替换元数据host的值
replace => ["host", "10.140.46.134"]
}
}
output {
stdout{
codec=>rubydebug
}
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "logstash-%{type}-%{+YYYY.MM.dd}"
document_type => "%{type}"
}
}
elasticseach和kinba访问地址
http://localhost:9200/_plugin/head/
http://localhost:5061/
ELK定制方案
公司基础服务组在elk的基础上定制了一套log平台,实现了根据配置指定路径和服务器ip +组合条件和时间
进行定位日志。
我们可以在一个通用的项目资产配置平台里面,把项目的信息配置上去,例如项目部署在那几台服务器、和项目日志所在的路径、项目的模块等等
然后我们在每台服务器上面部署一个脚本,脚本定时去项目资产平台webget一个filebeta.yml,这样就可以通用的部署filebeat了。
- 生产filebeat的动态配置文件
- 公司里面是把信息丢到kafka里面再处理的
shipper:
name: 172154-filebeat-1
queue_size: 1000
filebeat:
spool_size: 2048
idle_timeout: 2s
registry_file: /data/logs/filebeat/filebeat-1/.filebeat
publish_async: false
prospectors:
- paths:
- /data/logs/tomcat/mseckill/mseckillWAR.log
document_type: logs
ignore_older: 24h
close_older: 1h
scan_frequency: 10s
tail_files: true
force_close_files: true
fields_under_root: true
fields:
app: mseckill
server: tomcat
ver: 1
hostip: 172.25.172.154
logname: mseckillWAR
module: mobile
assigner: ggj2010
logid: 1489479045789
multiline:
pattern: '^[[:space:]]+|^Caused by:'
negate: false
match: after
max_lines: 500
output.kafka:
hosts: ["172.25.156.113:9092","172.25.156.114:9092","172.25.156.115:9092"]
topic: ule-business
key: ule-business
partition.round_robin:
reachable_only: false
required_acks: 1
compression: gzip
max_message_bytes: 1000000
logging:
level: info
to_files: true
to_syslog: false
files:
path: /data/logs/filebeat/filebeat-1
rotateeverybytes: 104857600
name: filebeat.log
keepfiles: 7