flume http resource作为我司数据上报的核心服务,为了保证稳定运行,及时发现异常,要求接入异常日志监控。我作为唯一的一个大数据运维,考虑将日志异常信息接入钉钉机器人告警。
由于java水平堪堪自慰,用linux bash shell 写又过于麻烦,各种过滤规则,想想就头大,想起了日志搜索神器TLK,反正以后还需要接入,借此机会就研究下。目前要求比较简单,用不到ES和 Kibana,光一个logstash就能满足要求。
官网地址: https://www.elastic.co/guide/en/logstash/current/introduction.html
Logstash是一个实时流式数据采集的开源引擎,可以动态采集不同来源的数据,经过自定义处理再将数据标准化到目标位置。个人感觉像flume,但是功能更丰富。
输入源支持:kafka,file,ES,ganglia,http,jmx,jdbc,redis,tcp,udp ...等等
输出源支持:csv,email,http,kafka,redis,ES,http,tcp,udp,zabbix ...等等
还支持数据编码,格式转换,数据聚合,数据拼接,增删自定义字段
看起来是花里胡哨,无所不能哦。功能如图,自己体会:
filebeat是一个简约的数据上报客户端,实测运行时物理内存占用不到50MB,官网地址:https://www.elastic.co/guide/en/beats/filebeat/7.6/filebeat-overview.html 可以转发汇集日志数据(比如Log,Stdin,Kafka,Redis,UDP,TCP)到ES,Logstash,kafka,redis,File。主要是和Logstash配套。
下载 filebeat用于客户端,上报日志,哪有日志需要上报,就安装到哪里
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.0-x86_64.rpm
rpm -ivh filebeat-7.6.0-x86_64.rpm
配置文件/etc/filebeat/filebeat.yml (这里需要看下自己的日志格式是怎么样的)
filebeat.inputs:
- type: log
#一个堆栈信息或者exception,因为会换行,需要将多行放在一起发送。匹配以日期开头的行
multiline.pattern: '^\d{4}-\d{2}-\d{2}'
multiline.negate: true
multiline.match: after
#忽视最后更新时间在5分钟前的文件
ignore_older: 5m
paths:
- /var/log/flume-ng/http-agent/flume-cmf-flume9-AGENT-hadoop-da-1.log
output.logstash:
#将日志文件推送到hadoop04 5044 端口
hosts: ["hadoop04:5044"]
service filebeat start | stop | retsrat | status
官方文档地址 https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
主要就是看下请求方式:
curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text",
"text": {
"content": "我就是我, 是不一样的烟火"
}
}'
下载 logstash,用于处理日志,注意这是server端,我只安装了一个。
cd /root
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.6.0.tar.gz
cd /root/logstash-7.6.0
vi /root/logstash-7.6.0/config/clog-http-agent-log.conf
#输入
input {
beats {
port => "5044"
}
}
#数据过滤,包含特定字符时丢弃该行
filter {
if [message] =~ "Form too large" {
drop { }
}
if [message] =~ "the name null" {
drop { }
}
if [message] =~ "jetty\.EofException" {
drop { }
}
}
#数据输出
output {
# 输出到控制台,用于测试,生产中可以删除
stdout { codec => rubydebug }
#日志异常信息通过钉钉告警
http {
url => "https://oapi.dingtalk.com/robot/send?access_token=488298742547xxxxxxxxxxxxx"
http_method => "post"
#这个mapping很重要,决定了http请求体的数据,要和钉钉上报格式一致
mapping => {
"msgtype" => "text"
"text" => "{'content':'clogHttpAgent--%{host}--%{message}'}"
}
}
}
测试配置文件正确与否
bin/logstash -f config/clog-http-agent-log.conf --config.test_and_exit
--config.test_and_exit选项会检查&测试配置文件,然后退出
运行piple收集客户端上报日志
nohup bin/logstash -f config/clog-http-agent-log.conf --config.reload.automatic > /dev/null 2>&1 &
--config.reload.automatic 会动态加载配置文件,不需要每次修改重启
停止logstash
kill -TERM {logstash_pid}