实时日志收集-查询-分析-监控系统(Flume+ElasticSearch+Kibana+elastalert)

黎东
L、先森
2018-01-24 0 130

设计方案:Flume(日志收集) + ElasticSearch(日志查询)+ Kibana(日志分析与展示)+ elastalert(日志监控)


安装Flume

参看:Flume 1.7.0 部署安装


安装ElasticSearch

参看:ElasticSearch  集群配置


安装Kibana

参看:kibana 4.1.11 安装


安装elastalert

参看:Elastalert的安装


flume 整合 elasticsearch

导入jar包

lucene-core-4.10.4.jar
elasticsearch-1.7.3.jar

当然也可以将Elasticsearch中lib下的jar包导入到Flume的lib下


增加flume的配置文件

vim /data/soft/flume-1.7.0/conf/flume-es-conf.conf
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.channels = c1
a1.sources.r1.command = tail -F /data/log/4.log

#interceptors
a1.sources.r1.interceptors=i1
a1.sources.r1.interceptors.i1.type=org.apache.flume.interceptor.TimestampInterceptor$Builder

# Describe the sink
a1.sinks.k1.type=org.apache.flume.sink.elasticsearch.ElasticSearchSink
a1.sinks.k1.batchSize=100
a1.sinks.k1.hostNames=172.16.144.32:9300
a1.sinks.k1.indexName=log
a1.sinks.k1.indexType=info
a1.sinks.k1.clusterName=elasticsearch
a1.sinks.k1.serializer=com._15166.flume.sink.elasticsearch.ElasticSearchLogGameEventSerializer
a1.sinks.k1.indexNameBuilder=com._15166.flume.sink.elasticsearch.TimeBasedIndexNameBuilder
a1.sinks.k1.serializer.payloadColumn =  log_ymd,log_ym,year,month,day,hour,minute,week,ip,device_model,os_name,os_ver,mac_addr,udid,app_channel,app_ver,network,platform_tag,group_id,channel_id,device_screen,server,account_id,role_id,role_name,create_time,role_level,role_job,login_time,last_logout_time,offline_item,total_pay,vip_level

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

ps:sink为自定义jar,也可以使用官方的


启动flume

bin/flume-ng agent -c conf -f conf/flume-es-conf.conf -n a1 -Dflume.root.logger=INFO,console


查看elasticsearch


F7FFF05BFF1DA401C57AFF05172040D2.png



配置elastalert

新增配置文件

vim /data/soft/elastalert-0.1.25/config.yaml
rules_folder: example_rules

run_every:
  minutes: 1

buffer_time:
  minutes: 15

use_ssl: false

es_host: 172.16.144.32

es_port: 9200

writeback_index: elastalert_status

alert_time_limit:
  days: 2

新增规则

vim /data/soft/elastalert-0.1.25/example_rules/frequency.yaml
# 可选的,elasticsearch 所在主机的ip地址
# es_host: elasticsearch.example.com

# 可选的,elasticsearch的服务端口
# 这里的elasticsearch之所以说是可选是因为在config.ymal中已经配置过了
# es_port: 14900

# 可选,是否使用SSL加密传送数据,这是因为elasticsearch如果被search-guard或者x-pack/shield保护的话,要启用
#use_ssl: True

# 可选,对应访问elasticsearch的账号和密码
es_username: admin
es_password: lidong123

# 必选的,rule的唯一名字
name: frequency rule

use_strftine_index: true
# 必选的,rule的类型
type: frequency

# 必选的,监控的索引
index: log-*

num_events: 1

# 必选的,窗口参照时间
timeframe:
  minutes: 1

# 必须的,进行匹配过滤的条件
# 更多过滤条件设置参考: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl.html
filter:
- term:
    total_pay: "null"



#SMTP协议的邮件服务器相关
smtp_host: "smtp.exmail.qq.com"
smtp_port: 25

#用户认证文件,需要user和password两个属性
smtp_auth_file: "/data/soft/elastalert-0.1.25/example_rules/aofei_email_auth.yaml"
email_reply_to: "xxx@qq.com"
from_addr: "xxx@qq.com"

# 必须的,报警方式
alert:
- "email"

# 必选的,邮件的接受地址
email:
- "to@qq.com"

新增邮件auth文件

vim /data/soft/elastalert-0.1.25/example_rules/aofei_email_auth.yaml
user: user
password: password

测试规则

发送邮件

elastalert-test-rule --alert example_rules/frequency.yaml


不发送邮件

elastalert-test-rule ./example_rules/frequency.yaml


测试

python -m elastalert.elastalert --verbose --rule example_rules/frequency.yaml



A3F739AE37EC491ECCF7302008BDB27C.png



大数据