docker安装efk
上一篇文章介绍了rsyslog采集网络设备日志到服务器(https://www.lovelearing.com/index.php/2023/07/25/rsyslog%e9%87%87%e9%9b%86%e7%bd%91%e7%bb%9c%e8%ae%be%e5%a4%87%e6%97%a5%e5%bf%97/),本篇基于采集的日志进行统一分析存储。采用EFK,参考文章:https://blog.csdn.net/weixin_45477800/article/details/126751697
#############elasticsearch##########
# 1、下载 elasticsearch:8.2.2 镜像
docker pull elasticsearch:8.2.2
##2、启动容器
docker run -d -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms4096m -Xmx8192m" -e "discovery.type=single-node" --name es docker.io/elasticsearch:8.2.2
# 3、拷贝es文件到宿主机,然后删掉容器
docker cp es:/usr/share/elasticsearch /data/elk/
mv elasticsearch es && docker stop es && docker rm es
#修改es配置文件
cat /data/elk/es/config/elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
# 关闭用户密码验证
xpack.security.enabled: false
# 4、重新创建容器并启动 内存限制
docker run -d -p 9200:9200 -p 9300:9300 --name es -e ES_JAVA_OPTS="-Xms4096m -Xmx8192m" -e "discovery.type=single-node" -v /data/elk/es/:/usr/share/elasticsearch/ --privileged=true docker.io/elasticsearch:8.2.2
#5、设置用户名密码(可选)
参考链接:https://cloud.tencent.com/developer/article/1537440
###################Kibana###################
#1、下载 kibana:8.2.2 版本镜像
sudo docker pull kibana:8.2.2
#2、启动容器
docker run -d -p 5601:5601 -e ELASTICSEARCH_URL=http://127.0.0.1:9200 --name kibana kibana:8.2.2
#3、拷贝容器到宿主机当前目录(自定义目录都行,注意cp下来的路径)
docker cp kibana:/usr/share/kibana /data/elk/kibana
#4、停止并删除容器
docker stop kibana && docker rm kibana
#5、重启容器
docker run -d -p 5601:5601 -e ELASTICSEARCH_URL=http://172.17.0.6:9200 -v /data/elk/kibana:/usr/share/kibana --name kibana --privileged=true kibana:8.2.2
#6、修改配置文件 hosts 为es容器的ip和端口
elasticsearch.hosts: [ "es地址:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
server.shutdownTimeout: "5s"
i18n.locale: "zh-CN" #中文
##########################Filebeat######################
#1、下载 filebeat:8.2.2 镜像
sudo docker pull elastic/filebeat:8.2.2
#2、启动容器
sudo docker run -d --name filebeat --user=root elastic/filebeat:8.2.2
#3、拷贝容器文件到宿主机
sudo docker cp filebeat:/usr/share/filebeat/filebeat.yml /data/elk/filebeat/
#4、删除容器
docker stop filebeat && docker rm filebeat
#5、重新创建并启动容器(需要把收集的日志挂载进容器里面,我这边测试环境日志是/log_data/,注意是/log_data/而不要写成/log_data,因为/log_data会被识别成文件,但是/log_data/是目录)
docker run -d --user=root --name filebeat -v /data/elk/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml -v/log_data/:/log_data/ elastic/filebeat:8.2.2
#6、修改filebeat.yml配置文件
注意yml格式,会报错,搞不定就用poe,chatgpt等ai工具格式化,这个是最快速有效的。
-----
filebeat.inputs:
- type: log
enabled: true
paths:
- /log_data/sangfor/10.250.111.*.log
fields:
type: firewall
reload:
enabled: true
interval: 10s
backoff: 1s
backoff_factor: 2
close_inactive: 1h
encoding: plain
harvester_buffer_size: 262144
max_backoff: 10s
max_bytes: 10485760
scan_frequency: 10s
tail_lines: true
- type: log
enabled: true
paths:
- /log_data/sangfor/10.250.18.250-*.log
fields:
type: ac
reload:
enabled: true
interval: 10s
backoff: 1s
backoff_factor: 2
close_inactive: 1h
encoding: plain
harvester_buffer_size: 262144
max_backoff: 10s
max_bytes: 10485760
scan_frequency: 10s
tail_lines: true
- type: log
enabled: true
paths:
- /log_data/sangfor/10.250.30.251-*.log
fields:
type: nmc
reload:
enabled: true
interval: 10s
backoff: 1s
backoff_factor: 2
close_inactive: 1h
encoding: plain
harvester_buffer_size: 262144
max_backoff: 10s
max_bytes: 10485760
scan_frequency: 10s
tail_lines: true
- type: log
enabled: true
paths:
- /log_data/h3c/10.250.82.1-*.log
- /log_data/cisco/10.250.20.1-*.log
- /log_data/cisco/192.168.88.1-*.log
fields:
type: coresw
reload:
enabled: true
interval: 10s
backoff: 1s
backoff_factor: 2
close_inactive: 1h
encoding: plain
harvester_buffer_size: 262144
max_backoff: 10s
max_bytes: 10485760
scan_frequency: 10s
tail_lines: true
- type: log
enabled: true
paths:
- /log_data/cisco/*.log
- /log_data/h3c/*.log
- /log_data/huawei/*.log
fields:
type: sw
reload:
enabled: true
interval: 10s
backoff: 1s
backoff_factor: 2
close_inactive: 1h
encoding: plain
harvester_buffer_size: 262144
max_backoff: 10s
max_bytes: 10485760
scan_frequency: 10s
tail_lines: true
output.elasticsearch:
workers: 4
bulk_max_size: 8192
hosts: ["10.250.0.135:9200"]
index: "heyteahq-%{[fields.type]}-%{+yyyy.MM.dd}"
processors:
- drop_fields:
fields:
- agent.ephemeral_id
- agent.hostname
- agent.id
- agent.type
- agent.version
- ecs.version
- input.type
- log.offset
- version
- decode_json_fields:
fields:
- message
max_depth: 1
overwrite_keys: true
setup.ilm.enabled: false
setup.template.name: hq
setup.template.pattern: hq*
setup.template.overwrite: true
setup.template.enabled: true
启动流程es----kibana----filebeat,如果报错可以使用docker -logs -f --tail 20 容器名字;去排查错误,一套流程走下来基本没啥问题;
1. 如果都访问成功,可以使用 curl localhost:9200/_cat/indices?v 查看filebeat定义的索引是否创建成功;
2. 如果有索引但没有触发钉钉告警,首先测试下索引是否有包含查询的内容( es告警,注意配置的是索引index,而不是数据量.ds, 这个是在filebeat.yaml文件中配置的,输出一定要写明确index,否则新版本默认是数据流.ds),然后测试钉钉webhook是否正常。
PS:.ds-network-sw-2025.02.11-2025.02.11-000001 是数据流,如果是对接es告警,这里是索引index。
curl -X GET "http://localhost:9200/.ds-network-sw-2025.02.11-2025.02.11-000001/_search" -H 'Content-Type: application/json' -d'
{
"query": {
"bool": {
"filter": [
{
"query_string": {
"query": "message:(down OR up OR deleted OR added OR error OR low OR failed OR '冲突' OR UP OR DOWN OR '断开')"
}
}
]
}
}
}'
3. kibana:
a) 在management页面,managementstack-management-数据-索引管理,能查看es的index或数据流以及模板
b) 在management页面,kibana-数据视图-创建数据视图,用关键字和* 来匹配 索引或数据流
c)analytics页面,discover-本地数据分析,既可以查看到创建的视图
############es-head#########
安装es-head,es-head是图形化查看es的信息,包括索引,集群状态等。
1.修改配置文件elasticsearch.yml。然后重启es
# 加入跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
2.下载镜像:
docker pull mobz/elasticsearch-head:5
3.创建容器:
docker run -d --name es-head -p 9100:9100 docker.io/mobz/elasticsearch-head:5
4.最后通过访问9100端口,来打开可视化head插件,连接es需要等待一会才能显示相关信息。
连接es,采用服务器ip,例如http://10.1.20.x:9200/

共有 0 条评论