Elastic Stack 包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)。能够安全可靠地获取任何来源、任何格式的数据,然后实时地对数据进行搜索、分析和可视化
Elasticsearch
是一个分布式、RESTful 风格的搜索和数据分析引擎
Kibana
是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化管理和展示
Logstash
是一个免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中
Beats
是一个免费且开放的平台,集合了多种单一用途数据采集器,将数据发送给 Logstash 或 Elasticsearch
Beats 系列
全品类采集器,搞定所有数据类型,如下:
- Filebeat:日志文件
- Metricbeat:指标
- Packetbeat:网络数据
- Winlogbeat:Windows 事件日志
- Auditbeat:审计数据
- Heartbeat:运行时间监控
- Functionbeat:无需服务器的采集器
一、下载镱像(image)
Docker映像和标签的列表:https://www.docker.elastic.co 搜索镱像(image)
docker search elasticsearch
docker search kibana
docker search logstash
获取镱像(image)
docker pull elasticsearch:7.6.0 #镜像名称:Tag
docker pull kibana:7.6.0 #镜像名称:Tag
docker pull logstash:7.6.0 #镜像名称:Tag
docker pull docker.elastic.co/beats/filebeat:7.6.0 #镜像名称:Tag
注:版本要统一
二、创建 ELK.yml
ELK.yml
version: "3.5"
services:
elasticsearch:
container_name: elasticsearch
image: elasticsearch:7.6.0 #镱像(image)
restart: always #重启方式
environment:
discovery.type: single-node #环境变量:运行模式 单例
ports:
- "9200:9200" #端口映射
- "9300:9300"
kibana:
container_name: kibana
image: kibana:7.6.0 #镱像(image)
restart: always #重启方式
environment:
I18N_LOCALE: "zh-CN" #指定中文
ports:
- "5601:5601" #端口映射
logstash:
container_name: logstash
image: logstash:7.6.0
restart: always
ports:
- "5044:5044"
- "9600:9600"
filebeat:
container_name: filebeat
image: filebeat:7.6.0
restart: always
command: filebeat -e -strict.perms=false #禁用严格权限检查
volumes: #文件夹映射,本地:容器
- "/Users/ichochy/beats/filebeat.yml:/usr/share/filebeat/filebeat.yml"
注:
- 注意YML文件编写,不要出现 Tab 制表符,否则导致文件解析错误,启动容器(container)失败
- 读取文件权限问题是软件自身的权限验证,可使用
--strict.perms=false
,禁用严格权限验证
# 错误信息
yaml.scanner.ScannerError: mapping values are not allowed here
# 错误息信
Exiting: error loading config file: config file ("{beatname}.yml") can only be
writable by the owner but the permissions are "-rw-rw-r--" (to fix the
permissions use: 'chmod go-w /etc/{beatname}/{beatname}.yml')
三、运行容器
宿主机hosts
中添加
127.0.0.1 elasticsearch
命令启动
docker-compose -f ELK.yml up -d
docker-compose
-f #指定构建文件
up #创建并启动容器
-d #后台运行容器(container),打印容器(container)ID
四、检查容器的运行状态
elasticsearch
访问:http://127.0.0.1:9200
logstash
访问:http://127.0.0.1:9600
Kibana
访问:http://127.0.0.1:5601,进入 Kibana
运行docker ps
查询容器运行状态,可以查看到容器的ID
mleo$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d53b3ab9772 filebeat:7.6.0 "/usr/local/bin/dock…" 2 days ago Up 8 minutes
1b8cb2effede logstash:7.6.0 "/usr/local/bin/dock…" 2 hours ago Up About an hour 0.0.0.0:5044->5044/tcp, 0.0.0.0:9600->9600/tcp logstash
69b8bc678e4e kibana:7.6.0 "/usr/local/bin/dumb…" 3 weeks ago Up 2 hours 0.0.0.0:5601->5601/tcp kibana
8c655f5b7493 elasticsearch:7.6.0 "/usr/local/bin/dock…" 3 weeks ago Up 2 hours 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp elasticsearch
运行docker logs id
查看容器运行日志
例:持续查看`filebeat`日志
docker logs 4d53b3ab9772 -f
五、修改 filebeats 配置
filebeat.inputs:
- type: log
paths:
- /usr/share/filebeat/logs/file/*.log
#output.elasticsearch:
# hosts: ["http://elasticsearch:9200"]
# index: "ichochy"
output.logstash:
hosts: ["logstash"]
注:容器中,服务间访问可以通过服务名直接访问(协议+服务名+端口),如:http://logstash:5044
六、修改 logstash 配置
- 运行
docker exec -it 1b8cb2effede bash
进入logstash - 运行
vi pipeline/logstash.conf
修改logstash默认配置
input {
beats {
port => 5044
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["http://elasticsearch:9200"] #elasticsearch请求地址
index => "ichochy" #索引名称
}
}
- 运行
docker restart 1b8cb2effede
重启 logstash
七、模拟采集日志
在filebeat
的监控的文件路径下动态添加日志文件,日志就可以自动采集发送到logstash
,过虑处理后发送到elasticsearch
运行docker exec -it 4d53b3ab9772 bash
进入filebeat
,在logs
文件夹添加web.log
文件
touch web.log #创建日志文件
echo "https://ichochy.com" > web.log #添加日志信息
查看logstash
日志信息可以看到打印的日志,监控来自filebeat
发来的信息
{
"ecs" => {
"version" => "1.4.0"
},
"@timestamp" => 2021-04-18T02:26:42.851Z,
"message" => "https://ichochy.com",
"tags" => [
[0] "beats_input_codec_plain_applied"
],
"input" => {
"type" => "log"
},
"@version" => "1",
"agent" => {
"ephemeral_id" => "cf2ff9ee-294a-4ac9-9ee7-3da65a3c5beb",
"hostname" => "4d53b3ab9772",
"id" => "897d2be6-5aa2-4a5d-a824-a440a4d19d73",
"version" => "7.6.0",
"type" => "filebeat"
},
"host" => {
"name" => "4d53b3ab9772"
},
"log" => {
"file" => {
"path" => "/usr/share/filebeat/logs/file/web.log"
},
"offset" => 0
}
}
例:持续查看`logstash`日志
docker logs 1b8cb2effede -f
八、管理、搜索、分析日志
访问:http://127.0.0.1:5601,进入 Kibana
在设置管理(management
)中创建索引:
在Discover
可以看到刚刚添加进来的日志数据,开始你的表演…………
引用
Beats
配置文件权限问题:https://www.elastic.co/guide/en/beats/libbeat/current/config-file-permissions.htmlCompose
网络访问:https://docs.docker.com/compose/networking/Docker
映像和标签的列表:https://www.docker.elastic.co