一、安装logtrail(基于docker)
1、方式一
sudo wget https://github.com/sivasamyk/logtrail/releases/download/v0.1.31/logtrail-7.2.0-0.1.31.zip
sudo docker cp logtrail-7.2.0-0.1.31.zip kibana:/
docker exec -it kibana bash
./bin/kibana-plugin install file:///logtrail-7.2.0-0.1.31.zip
获取配置文件:
sudo docker cp kibana:/usr/share/kibana/plugins/logtrail .
docker stop kibana
docker rm kibana
重新run kibana(将插件的目录映射出来)
docker run -d --name kibana1 -p 5602:5601 -v /docker/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:ro docker.elastic.co/kibana/kibana:7.2.0
2、方式二
编写Dockerfile如下
FROM docker.elastic.co/kibana/kibana:7.2.0
COPY logtrail-7.2.0-0.1.31.zip /tmp/
RUN ./bin/kibana-plugin install file:///logtrail-7.2.0-0.1.31.zip \
&& rm -rf /tmp/logtrail-7.2.0-0.1.31.zip
创建新的镜像
docker build -t kibana:7.2.0 .
二、配置logtrail.json
收集docker日志,显示容器名称更优雅一些。。。
配置hostname
对应的是容器名称,填写docker.container.name字段,对于k8s填写kubernetes.container.name字段
注意:keyword_suffix配置,有的版本需要设置为空才能显示,All Systems包含的容器名
{
"version" : 2,
"index_patterns" : [
{
"es": {
"default_index": "docker-localhost*"
},
"tail_interval_in_seconds": 1,
"es_index_time_offset_in_seconds": 0,
"display_timezone": "local",
"display_timestamp_format": "MMM DD HH:mm:ss",
"max_buckets": 500,
"default_time_range_in_days" : 0,
"max_hosts": 100,
"max_events_to_keep_in_viewer": 5000,
"default_search": "",
"fields" : {
"mapping" : {
"timestamp" : "@timestamp",
"hostname" : "container.name",
"program": "",
"message": "message"
},
"message_format": "{{{message}}}",
"keyword_suffix" : "keyword"
},
"color_mapping" : {
"field": "loglevel",
"mapping": {
"ERROR": "#FF0000",
"WARN": "#FFEF96",
"DEBUG": "#B5E7A0",
"TRACE": "#CFE0E8",
"INFO": "#339999"
}
}
}
]
}
三、日志级别颜色匹配
提供一个日志级别的loglevel字段,logstash中配置grok匹配
xqkang@xqkang:/docker/elk/logstash/pipeline$ cat docker.conf
input {
redis {
host => "192.168.10.46"
port => 6380
db => 0
key => "kxq"
password => "123456"
data_type => "list"
threads => 4
tags => "localhost"
}
}
filter {
grok {
match => {
"message" => "%{LOGLEVEL:loglevel}"
}
}
}
output {
if "localhost" in [tags] {
if [fields][function] == "docker" {
elasticsearch {
hosts => ["192.168.10.46:9201","192.168.10.46:9202","192.168.10.46:9203"]
index => "docker-localhost-%{+YYYY.MM.dd}"
}
}
}
}
四、logtrail优化
tail_interval_in_seconds:主页刷新时间,填写过大比较耗CPU(为了实时性,我选择了1)
default_time_range_in_days:默认为0,将搜索所有索引的日志,当日志越来越多将影响查询,配置显示一天即可,也可以用default_time_range_in_minutes设置分钟
链接:https://blog.csdn.net/cyfblog/article/details/103011855
五、es数据定期删除
ElasticSearch删除索引
curl -XDELETE 'http://ip:port/logstash-2016.12.12?pretty'
其中logstash-2016.12.12
为索引名
查看ElasticSearch所有索引
http://ip:port/_cat/indices
如果不删除ES数据,将会导致ES存储的数据越来越多,磁盘满了之后将无法写入新的数据。这时可以使用脚本定时删除过期数据。
#/bin/bash
#es-index-clear
#只保留15天内的日志索引
LAST_DATA=`date -d "-15 days" "+%Y.%m.%d"`
#删除上个月份所有的索引
curl -XDELETE 'http://ip:port/*-'${LAST_DATA}'*'
可以视个人情况调整保留的天数,这里的ip和port同样设置为不存储数据的那台机器。该脚本只需要在ES中一台机器定时运行即可。
crontab -e添加定时任务:
0 1 * * * /search/odin/elasticsearch/scripts/es-index-clear.sh
每天的凌晨一点清除索引。
其他
存储到ES的数据会有一个字段名为@timestamp,该时间戳和北京时间差了8小时,不需要进行调整,Kibana在展示的时候会自动加上8小时