文章目录
0、介绍
ELK
是三个
开源工具的缩写组合,用于构建集中式日志管理
和数据分析平台
:
- Elasticsearch:分布式搜索和分析引擎
- Logstash:
日志收集
、过滤和转发工具 - Kibana:数据
可视化
和分析界面
它们共同构成了一个完整的日志处理流水线,广泛应用于运维监控、安全分析、业务数据分析等领域。
0.1 Elasticsearch
0.1.1 功能
- 存储和
索引
:高效存储海量日志数据,并建立索引(类似数据库
)。 - 全文搜索:支持复杂的搜索语法(如模糊查询、聚合统计)
- 分布式架构:可横向扩展,支持PB级数据处理。
0.1.2 核心概念
索引(Index)
Index 是 Elasticsearch 中的
最基本单元
,类似于数据库的表
文档(Document)
一条JSON格式的数据记录(如
一条日志
)
0.2 Logstash
0.2.1 功能
数据采集
:从文件、数据库、Kafka等来源读取数据。数据过滤
:解析非结构化日志(如正则提取字段)。数据转发
:将处理后的数据发送到Elasticsearch、Kafka等。
它支持很多输入方式,最常用的还是
jdbc
,链接数据库读取表里面的日志
0.2.2 核心组件
组件 | 功能 |
---|---|
Input | 数据输入(如 file、beats、kafka) |
Filter | 数据处理(如 grok 解析日志、mutate 修改字段) |
Output | 数据输出(如 elasticsearch、stdout) |
下面到安装的时候会有详细的说明,可以看下面
0.3 Kibana
主要功能就是:
数据可视化:通过图表、仪表盘展示日志分析结果
核心模块
模块 | 功能 |
---|---|
Discover | 原始日志搜索和过滤。 |
Dashboard | 将多个图表组合成监控面板(这个后续可以让用户自己定义可视化界面 ) |
1. 部署 Elasticsearch
为 ELK 容器创建专用网络(方便容器间通信):
如若是用docker
必须执行下面这行,不然 Kibana 会启动不起来,在创建容器的时候,也要加上--net elk-net \
!!!!!!!!!!!!!!
sudo docker network create elk-net
1.1 拉取 ElasticSearch 镜像
docker pull elasticsearch:7.17.0
1.2 创建并运行容器
如若你需要弄
数据持久化
,必须要做下面这个操作,否则, ElasticSearch 容器会启动失败
Elasticsearch 容器默认以 UID
1000
的用户运行,如果主机上的挂载目录 的所有者不是 UID 1000,容器仍然会因权限不足
而报错。
自己创建的挂载目录的权限一般是下面这个图
但是,这样不行,目录所有者必须是UID 1000
# 后面这个目录,就是你要把 ElasticSearch 容器 数据持久化的目录
# root 用户的UID 是 0
chown -R 1000:1000 /data/ddg/docker/elasticsearch
创建容器并启动
sudo docker run -d \
--name elasticsearch \
--net elk-net \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-v /data/ddg/docker/elasticsearch:/usr/share/elasticsearch/data \
elasticsearch:7.17.0
参数/选项 | 说明 |
---|---|
sudo docker run -d | 以守护进程(后台)模式运行一个新的 Docker 容器 |
--name elasticsearch | 将容器命名为 elasticsearch ,便于后续管理 |
--net elk-net | 将容器连接到名为 elk-net 的 Docker 网络(需提前创建:docker network create elk-net)。 |
-p 9200:9200 | 端口映射:将主机的 9200 端口映射到容器的 9200 端口(HTTP REST API 端口) |
-p 9300:9300 | 端口映射:将主机的 9300 端口映射到容器的 9300 端口(集群通信端口) |
-e "discovery.type=single-node" | 设置 Elasticsearch 为单节点模式 |
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" | 限制 JVM 堆内存为 512MB(初始和最大值) |
-v /data/ddg/docker/elasticsearch:/usr/share/elasticsearch/data | 数据卷挂载:将主机目录映射到容器数据目录,实现持久化存储 |
elasticsearch:7.17.0 | 指定使用的 Elasticsearch 镜像版本 |
注意事项:
- 确保挂载目录存在且权限正确:
Elasticsearch 容器默认以 UID 1000 运行,需确保主机目录 /data/ddg/docker/elasticsearch 的所有者为 1000
# Elasticsearch 容器默认以 UID 1000 运行,需确保主机目录 /data/ddg/docker/elasticsearch 的所有者为 1000
sudo mkdir -p /data/ddg/docker/elasticsearch
sudo chown -R 1000:1000 /data/ddg/docker/elasticsearch
1.3 验证是否创建成功
验证是否成功
# 验证是否 启动成功
curl http://localhost:9200
出现这个图,东西就是成功了,也可以直接在浏览器地址栏输入 自己的公网IP+9200 端口,记得要开放 服务器防火墙 这个端口号
2. 部署 Kibana
2.1 获取 Kibana 镜像
务必注意,Kibana的版本要和ElasticSearch 相等,或者接近,最好
相等
docker pull kibana:7.17.0
2.2 创建并运行容器
-e “I18N_LOCALE=zh-CN” \ 把界面设置为中文, 后续也可以调整,也可以先不设置,网上都有解决方案
sudo docker run -d \
--name kibana \
--net elk-net \
-p 5601:5601 \
-e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" \
-e "I18N_LOCALE=zh-CN" \
kibana:7.17.0
这样就是
成功
了,可以打开浏览器验证, 下面Kibana server is not ready yet
的意思是Kibana服务器尚未就绪
需要等待几分钟
有了这个就是
成功
了
点击
自己浏览
3. 部署 logstash
3.1 拉取镜像
docker pull logstash:7.17.0
3.2 创建logstash容器并运行
注意
- 现在演示的是,logstash 监听容器外部的日志文件
- 我们需要将容器外部的文件映射到容器内,才可以完成监听
- 也可以监听数据库的某个表,这个后续再说
- 先创建文件夹,然后创建配置文件,需要覆盖
Logstash
的配置文件 - 创建容器
mkdir -p /data/ddg/docker/logstash
cat > /data/ddg/docker/logstash/logstash.conf <<EOF
input {
file {
path => "/var/log/*.log" # 监听容器内的日志文件(需挂载宿主机日志目录)
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "logs-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug } # 可选:在控制台输出日志
}
EOF
sudo docker run -d \
--name logstash \
--net elk-net \
-v /data/ddg/docker/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-v /data/testLogstash:/var/log \
logstash:7.17.0
这样就是容器创建、启动成功了
往被监听的宿主机的目录,插入一条数据 ,验证 索引有没有生成
echo "Test ELK log at $(date)" >> /data/testLogstash/01.log
这样就对了,就说明 索引生成成功了,下面就是创建一个
数据视图
,可视化管理这些日志
看到上面这个图,就
成了
!!!!!!!!!!,
可以再给被监听的宿主机的目录。再次添加一个 日志,然后点击 这个界面的刷新,就可以看到你添加的日志了。
运行这个ELK 还是很吃内存的,直接占了
2G