Linux系统
本节内容摘自http://baidu.blog.51cto.com/71938/1676798
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和 效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。官方网站:https://www.elastic.co/products
- Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
- Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。
- kibana 也是一个开源和免费的工具,他Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、 分析和搜索重要数据日志。
工作原理如下如所示:
在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到logstash indexer,logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。
https://www.elastic.co/products/elasticsearch
tar -zxvf elasticsearch-2.4.2.tar.gz
mv elasticsearch-2.4.2 elasticsearch-2.4.2_1
cd elasticsearch-2.4.2_1/config
./bin/plugin install mobz/elasticsearch-head
这里集群包含3台服务器
cluster.name: es-cluster
node.name: node-1
network.host: 你的服务器ip地址
http.port: 9211
transport.tcp.port: 9311
#过期时间
index.cache.field.expire: 1d
#默认类型为resident, 字面意思是常驻(居民), 一直增加,直到内存 耗尽。 改为soft就是当内存不足的时候,先clear掉 占用的,然后再 往内存中放。设置为soft后,相当于设置成了相对的内存大小。resident的话,除非内存够大。
index.cache.field.type: soft
#可能是因为我使用的服务器已经有了一个elasticsearch集群的原因,这里不写集群地址,集群启动后无法建立,原因待查
discovery.zen.ping.unicast.hosts: ["你的服务器列表(TCP端口哦)", "你的服务器列表(TCP端口哦)","你的服务器列表(TCP端口哦)"]
node.name: node-2
http.port: 9212
transport.tcp.port: 9312
node.name: node-3
http.port: 9213
transport.tcp.port: 9313
后台启动3台服务器:
./bin/elasticsearch &
注意要讲elasticsearch所有文件用户赋给elasticsearch用户,否则没权限。
这是出于系统安全考虑设置的条件。由于ElasticSearch可以接收用户输入的脚本并且执行,为了系统安全考虑。
chown -R elasticsearch elasticsearch2.4.0
如果出现
curl 127.0.0.1:9211
可以正常访问,curl 本机IP地址:9211
不能访问的问题,则需要在conf文件中配置network.host: 你的服务器ip地址
。参考:ss -l
命令
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 => true
what => "previous"
}
}
output {
if [type] == "infolog" {
elasticsearch {
action => "index" #The operation on ES
hosts => ["elasticsearch的IP地址:9211", "elasticsearch的IP地址:9212","elasticsearch的IP地址:9213"] #ElasticSearch host, can be array.
index => "apilog_%{+YYYY.MM.dd}" #The index to write data to.
}
}else{
elasticsearch {
action => "index" #The operation on ES
hosts => ["elasticsearch的IP地址:9211", "elasticsearch的IP地址:9212","elasticsearch的IP地址:9213"] #ElasticSearch host, can be array.
index => "apierrorlog_%{+YYYY.MM.dd}" #The index to write data to.
}
}
}
filter {
multiline {
pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
negate => true
what => "previous"
}
}
log4j.logger.包名=debug, socket
# appender socket
log4j.appender.socket=org.apache.log4j.net.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
./bin/logstash agent -f config/log4j_to_es.conf &
server.port: 5601
server.host: "你的IP地址"
elasticsearch.url: "http://你的IP地址:9211"
kibana.index: ".kibana"
nohup bin/kibana &
但是nohup在使用时还需要注意一些问题:
1、当输入nohup COMMAND & 命令后,需要按任意键返回到shell窗口
2、退出当前登录窗口用exit命令,不要直接点击窗口上的叉来关闭
进入kibana,配置好在logstash中配置的索引
参考资料 elasticsearch的索引自动清理及自定义清理
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} 执行完毕。"
文件名为: es-index-clear.sh
输入crontab -e,出现vi编辑页面
输入以下命令,每天两点10分执行sh文件:
10 2 */1 * * /letv/soft/elk/logstash-2.4.1/bin/es-index-clear.sh
保存退出即可。
到此为止,ELK环境搭建完毕。
后续会继续写ELK的具体使用教程,敬请期待