开源实时日志分析 ELK 平台"/>
开源实时日志分析 ELK 平台
开源实时日志分析 ELK 平台由 ElasticSearch 、 Logstash 和 Kibana 三个开源工具组成。
Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制, restful 风格接口,多数据源,自动搜索负载等。
Logstash 是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。
Kibana 也是一个开源和免费的工具,他 Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据。
一、Logstash
安装:tar zxvf logstash-1.5.2.tar.gz
运行:./logstash -e 'input { stdin { } } output { stdout {} }'
结果:
Logstash startup completed
Hello World!
2015-07-15T03:28:56.938Z noc.vfast Hello World!
退出:Ctrl+C
编辑:vim logstash-simple.conf
input { stdin { } }
output {stdout { codec=> rubydebug }
}
运行:./logstash agent -f logstash-simple.conf
结果:
Logstash startup completed
hello cpit
{"message" => "hello cpit","@version" => "1","@timestamp" => "2017-03-27T08:10:19.586Z","host" => "mcs-slave-2"
}
二、Elasticsearch
安装:tar zxvf elasticsearch-1.7.1.tar.gz
启动:./elasticsearch
确认elasticsearch的9200端口已监听:netstat -anp |grep :9200
结果:tcp6 0 0 :::9200 :::* LISTEN 7169/java
三、测试logstash使用elasticsearch作为logstash的后端
编辑:vim logstash-es-simple.conf
input { stdin { } }
output {elasticsearch {host => "localhost" }stdout { codec=> rubydebug }
}
执行:./logstash agent -f logstash-es-simple.conf
后台启动:nohup . /elasticsearch &
结果:
Logstash startup completed
hello logstash
{"message" => "hello logstash","@version" => "1","@timestamp" => "2015-07-15T18:12:00.450Z","host" => "noc.vfast"
}
使用curl来查看ES是否接收到了数据:curl 'http://localhost:9200/_search?pretty'
结果:
{"took" : 47,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"failed" : 0},"hits" : {"total" : 1,"max_score" : 1.0,"hits" : [ {"_index" : "logstash-2017.03.27","_type" : "logs","_id" : "AVsO1xmUL1RJegwzT5T5","_score" : 1.0,"_source":{"message":"hello logstash","@version":"1","@timestamp":"2017-03-27T08:17:08.889Z","host":"mcs-slave-2"}} ]}
}
四、Elasticsearch-kopf插件可以查询Elasticsearch中的数据
安装进入Elasticsearch的安装目录执行:./plugin -install lmenezes/elasticsearch-kopf
安装完成后在plugins目录下可以看到kopf.
#在配置文件elasticsearch.yml里设置script.disable_dynamic: true
在浏览器访问:9200/_plugin/kopf/#!/cluster浏览可以查询保存在Elasticsearch中的数据
五、Kibana
netstat -apn | grep 5601
安装: tar zxvf rashidkpc-kibana-b83dedf.tar.gz
启动:./kibana
使用:5601访问Kibana, 登录后,配置一个索引.
六、配置logstash作为Indexer
编写配置文件:vim logstash-indexer.conf
input {file {type =>"syslog"path => ["/var/log/messages", "/var/log/syslog" ]}syslog {type =>"syslog"port =>"5544"}
}
output {stdout { codec=> rubydebug }elasticsearch {host => "10.3.17.237" }
}
运行:./logstash agent -f logstash-indexer.conf
使用echo命令模拟写入日志:echo "`date` cpit " >>/var/log/messages
七、elasticsearch集群安装
安装head插件:./plugin install mobz/elasticsearch-head
配置config
cluster.name: es-cluster
node.name: node-1 #不同
network.host: #你的服务器ip地址
http.port: #9211 #不同
transport.tcp.port: #9311 #不同
index.cache.field.expire: 1d #过期时间
index.cache.field.type: soft
#默认类型为resident, 字面意思是常驻(居民), 一直增加,直到内存耗尽。改为soft就是当内存不足的时候,先clear掉占用的,然后再往内存中放。设置为soft后,相当于设置成了相对的内存大小。resident的话,除非内存够大。
discovery.zen.ping.unicast.hosts: ["你的服务器列表(TCP端口)", "你的服务器列表(TCP端口)","你的服务器列表(TCP端口)"]
修改配置文件:log4j_to_es.conf
input {file {type => "infolog"path => "你的日志路径*.log" #监听文件的路径}file {type => "errorlog" path => "你的日志路径*.log"}
}
filter {multiline { pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"negate => truewhat => "previous"}
}
output {if [type] == "infolog" {elasticsearch {action => "index" #The operation on EShosts => ["elasticsearch的IP地址:9211", "elasticsearch的IP地址:9212","elasticsearch的IP地址:9213"]
index => "apilog_%{+YYYY.MM.dd}" }}else{elasticsearch {action => "index" #The operation on EShosts => ["elasticsearch的IP地址:9211", "elasticsearch的IP地址:9212","elasticsearch的IP地址:9213"]
index => "apierrorlog_%{+YYYY.MM.dd}" }}
}
直接与log4j配合使用,直接将日志输出到logstash中
log4j.logger.包名=debug, socket
# appender socket
log4j.appender.socket=org.apache.log4j.SocketAppender
log4j.appender.socket.Port=${elk_port}
log4j.appender.socket.RemoteHost=${elk_ip}
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n
log4j.appender.socket.ReconnectionDelay=10000
八、定时清理ES索引数据
编写清理脚本:es-index-clear.sh
LAST_DATA=`date -d '-3 day' +%Y.%m.%d`
echo ”${LAST_DATA} 开始执行删除操作“
curl -XDELETE 'http://10.104.29.19:9211/*'${LAST_DATA}''
echo "${LAST_DATA} 执行完毕。
设置定时任务
输入crontab -e,出现vi编辑页面
输入以下命令,每天两点10分执行sh文件:
10 2 */1 * * /letv/soft/elk/logstash-2.4.1/bin/es-index-clear.sh
更多推荐
开源实时日志分析 ELK 平台
发布评论