ELK安装部署手册
本文主要探讨开发过程中,如何快速构建一个ELK工具,帮助调试ELK,不涉及正式环境的部署。
用当前最新版本 Elasticsearch 8.17.0 、Kibana 8.17.0 、Logstash 8.17.0,
ELK 8.* 版本默认启用SSL,由于单纯的开发需要,采用最简化配置,手动关闭了安全验证。
后续会介绍,Nlog 和 ELK集成相关内容,以及ELK 8.* 和 Net 8.0集成中遇见的问题
1. 简介
Elastic Stack核心产品包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)等等。能够安全可靠地从任何来源获取任何格式的数据,然后对数据进行搜索、分析和可视化。
2.系统要求
- 操作系统:Linux、macOS 或 Windows
- 内存:至少 4 GB(推荐 8 GB 或更多)
- Docker 和 Docker Compose
3. 安装 Docker
如果您尚未安装 Docker 和 Docker Compose,请按照以下步骤进行安装:
在 Windows 上安装 Docker
从 Docker 官方网站 下载并安装 Docker Desktop
4. Docker 部署 Elasticsearch,Kibana,Logstash
创建Docker Compose 文件
在工作目录创建一个 docker-compose.yml 文件
services:
elasticsearch:
image: elasticsearch:8.17.0
container_name: elasticsearch
environment:
- node.name=es01
- cluster.name=es-cluster
- discovery.type=single-node
- xpack.security.enabled=false
- xpack.ml.enabled=false
- xpack.watcher.enabled=false
- xpack.graph.enabled=false
ports:
- "9200:9200"
# - "9300:9300"
networks:
- elk
logstash:
image: logstash:8.17.0
container_name: logstash
environment:
- xpack.monitoring.enabled=false
- xpack.monitoring.elasticsearch.hosts=http://elasticsearch:9200
ports:
- "5044:5044"
networks:
- elk
volumes:
- ./logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
kibana:
image: kibana:8.17.0
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- xpack.security.enabled=false
ports:
- "5601:5601"
networks:
- elk
networks:
elk:
driver: bridge
logstash 配置文件
在 ./logstash/pipeline 目录下创建 logstash.conf 配置文件
input {
http {
host => "0.0.0.0"
port => 5044
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "logstash-%{+yyyy.MM.dd}"
}
}
目录结构
ELK-Install/
├── docker-compose.yml
├── logstash/
│ └── pipeline/
│ └── logstash.conf
执行docker-compose 命令
docker-compose up -d
等待镜像下载完成

ELK启动

验证是否安装完成

elasticsearch验证
浏览器访问 http://localhost:9200

验证Kibana
浏览器访问 http://localhost:5601

验证logstash
浏览器访问 http://localhost:5044/

演示ELK 简单使用
Elasticsearch 直接保存数据
curl --location --request PUT 'http://localhost:9200/log-index/_doc/1' \
--header 'Content-Type: application/json' \
--header 'Accept: */*' \
--header 'Host: localhost:9200' \
--header 'Connection: keep-alive' \
--data-raw '{
"name": "1984",
"author": "George Orwell",
"release_date": "1985-06-01",
"page_count": 328
}'
Response 返回结果
{
"_index": "log-index",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
按照步骤配置Kibana


选择自己需要的时间字段,此处可以选择release_date,大多数情况选择 @timestamp

查询数据

通过logstash 保存数据到elasticsearch
curl --location --request POST 'http://localhost:5044/' \
--header 'User-Agent: Apifox/1.0.0 (https://apifox.com)' \
--header 'Content-Type: application/json' \
--header 'Accept: */*' \
--header 'Host: localhost:5044' \
--header 'Connection: keep-alive' \
--data-raw '{
"name": "2025",
"author": "logstash",
"release_date": "2025-01-12",
"page_count": 1000
}'


常见问题
由于网络情况不同,docker 部署环境不同,在docker容器中访问 http://elasticsearch:9200 可能出现访问拒绝的情况,可以修改windows的hosts配置,在其中增加 127.0.0.1 elasticsearch
通过以上步骤,就可以搭建一个属于自己的ELK,请尽情使用它吧。
浙公网安备 33010602011771号