概述
ELK日志分析平台是指Elasticsearch、Logstash 和 Kibana 三个项目的集合,后面又增加了Filebeat数据采集器。
- Elasticsearch是一个数据搜索分析引擎。
- Logstash 是日志数据处理的管理和日志采集器,能从各个客户端/业务系统采集,转换,发送到Elasticsearch。
- Kibana 则是数据图形/报表的可视化展示。
- Filebeat 是比Logstash更轻巧的数据采集器
一般而言,日志数据流采用一下两种方案
- Filebeat负责数据采集日志,然后转发到Logstash进行格式处理并发送到Elasticsearch进行存储,然后管理员通过Kibana实现数据可视化。
-
Filebeat负责数据采集日志,然后进行格式处理并发送到Elasticsearch进行存储,然后管理员通过Kibana实现数据可视化。
本篇文章将对方案二的搭建以及使用进行讲解。
目的
- 项目线上出现错误,快速定位问题。
- 项目节点过多,日志太分散,ELK可以统一管理日志。
- 方便在大量日志文件中精准搜索关键字
- 解决开发人员无服务器权限需要查看日志的痛点
安装
git clone https://github.com/deviantony/docker-elk.git # 我下载的是8.6.2版本
docker-compose up #启动容器 只会启动 elasticsearch、kibana、logstash
默认用户:elastic
默认密码:changeme
kibana UI : http://localhost:5601
elasticsearch: http://localhost:9200/
详情可以查看.env 文件
设置用户名密码
输入默认账号密码登录kibana
步骤一
步骤二
汉化kibana
在 /kibana/config/kibana.yml 文件最后添加:i18n.locale: "zh-CN"
配置filebeat 通过filebeat采集日志输出到elasticsearch
/extensions/filebeat/config/filebeat.yml,
注意里面的账号密码需要在kibana预先设置好
setup.kibana:
#kibanaIP地址
host: "http://kibana:5601"
username: "filebeat_internal"
password: ${FILEBEAT_INTERNAL_PASSWORD}
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/share/filebeat/logs/*.log # 这个路径是需要收集的日志路径,是docker容器中的路径
fields:
type: "testing" # 日志标签,区别不同日志,下面建立索引会用到
fields_under_root: true
encoding: utf-8 # 指定被监控的文件的编码类型,使用plain和utf-8都是可以处理中文日志的
multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true # 是否需要对pattern条件转置使用,不翻转设为true,反转设置为false。 【建议设置为true】
multiline.match: after # 匹配pattern后,与前面(before)还是后面(after)的内容合并为一条日志
processors:
- drop_fields:
# 去除多余字段
fields: ["agent.type","agent.name", "agent.version","log.file.path","log.offset","input.type","ecs.version","host.name","agent.ephemeral_id","agent.hostname","agent.id","_id","_index","_score","_suricata.eve.timestamp","agent.hostname","cloud. availability_zone","host.containerized","host.os.kernel","host.os.name","host.os.version"]
output.elasticsearch:
hosts: [ http://elasticsearch:9200 ]
indices:
#索引名称,一般为 ‘服务名称+ip+ --%{+yyyy.MM.dd}’。
- index: "testing-%{+yyyy.MM.dd}"
when.contains:
#标签,对应日志和索引,和上面对应
type: "testing"
username: filebeat_internal
password: ${FILEBEAT_INTERNAL_PASSWORD}
映射日志目录文件
建立/logs目录,并写入一写测试的日志文件
/extensions/filebeat/filebeat-compose.yml
启动容器
# 同时启动elasticsearch、kibana、logstash、filebeat
docker-compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml up
配置工作空间
步骤一创建工作区
切换工作区
步骤二
步骤三
步骤四
步骤五
步骤六
elasticsearch kibana 提示Your trial license is expired 问题解决
选择Basic许可证
给索引设置生命周期
1.创建索引生命周期策略,超过30天自动删除索引
2.设置索引模版
PUT _ilm/policy/log_delete_policy
{
"policy": {
"phases": {
"delete": {
"min_age": "5m",
"actions": {
"delete": {}
}
}
}
}
}
PUT _template/logs_template
{
"index_patterns": ["testing*"],
"settings":{
"index.lifecycle.name": "log_delete_policy"
},
"mappings":{
"properties":{
"message":{
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}