前情提要:
ELK 是一个由 Elasticsearch、Logstash 和 Kibana 组成的技术栈,用于集中式日志管理和数据分析。它的主要作用包括:
- 日志收集和处理 Logstash:作为数据收集和处理引擎,Logstash 能够从多个来源(如日志文件、数据库、消息队列等)收集数据,进行过滤、解析、增强并将其传输到 Elasticsearch。Logstash 支持丰富的插件,可以根据需要灵活配置数据管道。
- 数据存储和搜索 Elasticsearch:一个分布式搜索和分析引擎,擅长处理大规模的数据。Elasticsearch 使用文档存储数据,能够提供近乎实时的搜索和分析能力。它的分布式架构使其具备高可用性和水平扩展能力。
- 数据可视化和分析 Kibana:作为一个数据可视化和分析平台,Kibana 提供了丰富的图表和仪表板,用户可以通过 Kibana 直观地展示和分析存储在 Elasticsearch 中的数据。Kibana 提供了强大的过滤、查询和仪表板共享功能,适用于多种数据分析场景。 主要用途 集中式日志管理 收集和存储来自不同应用程序、服务器和网络设备的日志数据,提供统一的日志访问和管理界面。 实时监控和报警 实时监控系统性能和应用程序行为,通过创建仪表板和设置报警规则,及时发现和响应问题。 安全信息和事件管理 (SIEM) 集中收集和分析安全日志,检测和响应安全事件,满足合规性要求。 业务分析 从业务数据中提取有价值的信息,通过数据分析和可视化,支持业务决策。
ELK文件配置准备
目录层次图
logstash.yml
config:
reload:
automatic: true
interval: 3s
xpack:
management.enabled: false
monitoring.enabled: false
pipelines.yml
- pipeline.id: logstash_dev
path.config: /usr/share/logstash/pipeline/logstash_dev.conf
logstash_dev.conf
input {
beats {
port => 9900
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
mutate {
convert => {
"bytes" => "integer"
}
}
geoip {
source => "clientip"
}
useragent {
source => "user_agent"
target => "useragent"
}
date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
}
}
output {
stdout { }
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "logstash-poc"
}
}
kibana.yml
erver.name: kibana
server.host: "0"
elasticsearch.hosts: ["elasticsearch:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true
filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/share/filebeat/logs/*
output:
logstash:
hosts: ["logstash:9900"]
docker-compose.yml配置(根据自己的路径修改 volumes 挂载的信息)
version: '3.7'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.7.1
container_name: elasticsearch
environment:
- discovery.type=single-node
ports:
- "9201:9200"
- "9301:9300"
volumes:
- /data/docker-data/elk/es/data:/usr/share/elasticsearch/data
- /data/docker-data/elk/es/logs:/usr/share/elasticsearch/logs
- /data/docker-data/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
logstash:
image: docker.elastic.co/logstash/logstash:7.7.1
container_name: logstash
ports:
- "5044:5044"
- "9600:9600"
volumes:
- /data/docker-data/elk/logstash/pipeline:/usr/share/logstash/pipeline
- /data/docker-data/elk/logstash/config:/usr/share/logstash/config
depends_on:
- elasticsearch
kibana:
image: docker.elastic.co/kibana/kibana:7.7.1
container_name: kibana
ports:
- "5601:5601"
environment:
- SERVER_NAME=kibana
- SERVER_HOST=0.0.0.0
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- XPACK_MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED=true
depends_on:
- elasticsearch
filebeat:
image: docker.elastic.co/beats/filebeat:7.7.1
container_name: filebeat
volumes:
- /data/docker-data/elk/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml
- /data/docker-data/elk/filebeat/logs:/usr/share/filebeat/logs
- /var/lib/docker/containers:/var/lib/docker/containers
command: ["--strict.perms=false"]
depends_on:
- logstash
- elasticsearch
下载docker-compose
yum install -y python3-pip
sudo pip3 install docker-compose -i https://mirrors.aliyun.com/pypi/simple/
备注:需要在docker-compose.yml文件所在目录执行
启动docker-compose
docker-compose up -d
关闭docker-compose
docker-compose down
查看日志(-f 后面可以接其他container_name)
docker-compose logs -f elasticsearch
测试es启动 服务器ip:9201(端口可以自己配置)
测试kibana启动 服务器ip:5601 (容器启动后需要时间运行,稍等片刻)
测试日志解析(未接入项目,手动导入日志文件测试)
使用 Docker 进行目录创建和日志文件准备:
docker exec -it filebeat mkdir -p /usr/share/filebeat/logs
将准备好的日志文件传到filebeat容器中
docker cp [your_path]/logfile.log filebeat:/usr/share/filebeat/logs/
重启filebeat
docker-compose restart filebeat