ElasticStack分布式日志系统概述
-
Elasticsearch:
- 一个分布式搜索引擎,能够快速存储、搜索和分析大量数据。
- 核心概念包括索引(Index)、文档(Document)和分片(Shard)。
- 使用 RESTful API 进行数据操作,支持复杂的查询和聚合操作。
-
Logstash:
- 一个数据处理管道工具,用于从各种来源(如日志文件、数据库)收集、处理和传输数据。
- 支持丰富的输入(Input)、过滤(Filter)和输出(Output)插件,用于定制数据处理流程。
-
Kibana:
- 一个开源的数据可视化工具,用于在 Elasticsearch 上构建可视化分析仪表盘。
- 支持创建图表、地图、表格等多种可视化形式,方便用户探索和分析数据。
使用Docker可获取Elasticsearch镜像。
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.9.3
拉取Kibana镜像
docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 kibana:7.9.3
下载Logstash的安装包。
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.1.0.tar.gz
解压下载的安装包到指定目录。
tar -zxvf logstash-7.1.0.tar.gz
在 Docker 中创建一个 ELK(Elasticsearch, Logstash, Kibana)栈,可以按照以下步骤操作
项目目录中创建一个 docker-compose.yml
目录结构如下
version: '7.5.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
container_name: elasticsearch
environment:
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata:/usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"logstash:
image: docker.elastic.co/logstash/logstash:7.5.2
container_name: logstash
volumes:
- ./logstash/pipeline:/usr/share/logstash/pipeline
ports:
- "5044:5044"
- "9600:9600"kibana:
image: docker.elastic.co/kibana/kibana:7.5.2
container_name: kibana
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
ports:
- "5601:5601"volumes:
esdata:
driver: local
配置 Logstash 管道
项目目录中创建 logstash/pipeline
目录,并在其中创建 logstash.conf
文件。
input {
beats {
port => 5044
}
}filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGLINE}" }
}
date {
match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}output {
elasticsearch {
hosts => "http://elasticsearch:9200"
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
启动 ELK 容器
docker-compose up -d
这个命令会在后台启动 Elasticsearch、Logstash 和 Kibana 容器。
验证 ELK 栈是否正常运行
- 访问 Kibana: 在浏览器中输入
http://localhost:5601
,你应该能够看到 Kibana 的欢迎界面。 - 访问 Elasticsearch: 通过
http://localhost:9200
,你应该能看到一个 JSON 响应,显示 Elasticsearch 的状态信息。
使用 ELK
配置好后,你可以将日志数据发送到 Logstash 的 5044 端口,并通过 Kibana 可视化分析这些数据。
这样,你就成功地在 Docker 中创建了一个 ELK 栈,并可以开始使用它来收集、分析和可视化日志数据。如果你有更多的自定义需求,比如增加额外的插件或自定义配置,可以在 docker-compose.yml
文件中进行调整。