docker一键部署filebeat、metricbeat
- filebeat部署
- 创建配置文件
- 一键启动
- 修改配置文件
- 查验信息
- metricbeat部署
- 创建配置文件
- 一键启动
- 修改配置文件
- 查验信息
上两篇文章写了搭建部署es集群和部署kibana
这篇写一键部署filebeat和metricbeat收集工具
规划服务器是
es01:172.23.165.185
es02:172.23.165.186
es03:172.23.165.187
每一台服务器都要部署metricbeat,用来收集系统日志,监控系统cpu、内存和流量等等,至于filebeat是否要部署取决于你的服务器上是否有应用服务、是否有服务日志需要收集,有则部署
本次filebeat、metricbeat部署在172.23.165.185,如果在其他的服务器,请修改内存映射数量、创建网络等。参考第一个
docker一键部署EFK系统(elasticsearch filebeat kibana metricbeat es-head)
【EFK日志系统】docker一键部署kibana、es-head
【EFK日志系统】docker一键部署filebeat、metricbeat
【EFK日志系统】在kibana操作索引模板、生命周期、管道等
filebeat部署
在es、kibana同级目录创建filebeat和metricbeat
mkdir {filebeat,metricbeat}
创建配置文件
1.创建docker-compose.yml文件
version: '3'
services: filebeat:build:context: .dockerfile: Dockerfileimage: docker.elastic.co/beats/filebeat:7.10.0container_name: filebeatprivileged: trueenvironment:- TZ=Asia/Shanghairestart: always
# volumes:
# - ./filebeat.yml:/usr/share/filebeat/filebeat.yml:rw
# - ./data:/usr/share/filebeat/data:rw
# - ./logs:/usr/share/filebeat/logs:rw
# - ./modules.d:/usr/share/filebeat/modules.d:rwnetworks:- es-netnetworks:es-net:external: true
2.创建Dockerfile
FROM docker.elastic.co/beats/filebeat:7.10.0#COPY ./filebeat.yml /usr/share/filebeat/
一键启动
创建完文件后执行
docker-compose up -d
查看该容器是否正常启动
docker ps
启动正常执行
docker cp -a filebeat:/usr/share/filebeat/data .
docker cp -a filebeat:/usr/share/filebeat/logs .
docker cp -a filebeat:/usr/share/filebeat/modules.d .
docker cp -a filebeat:/usr/share/filebeat/filebeat.yml .
修改配置文件
1.取消docker-compose.yml的注释部分
即卷映射部分注释打开
2.取消Dockerfile的注释部分
即COPY ./filebeat.yml /usr/share/filebeat/
3.编写filebeat.yml
刚刚我们将filebeat.yml复制出来了,在本级目录编写修改
setup.template.enabled: false #关闭自动加载默认索引模板
setup.ilm.enabled: false #关闭默认生命周期
setup.template.overwrite: true #打开同名覆盖强写
setup.template.name: "application-logs" #这是你的索引模板名称,下一篇文章创建
setup.template.pattern: "application-logs-*"logging.level: info
logging.selectors: ["*"]filebeat.inputs:- type: logid: java-app1enabled: truepaths:- /usr/share/filebeat/datalog/java-app1/*.log #容器内的日志路径,我们通过volumes将容器外即你的宿主机的日志(想要采集的日志)映射进容器内fields: #自定义预采集服务的各个字段env: testapplication: java-app1 log_type: app1_logignore_older: 168h #只采集最新7天的日志multiline: #通过识别时间戳进行多行合并,例如个别日志报错会出现数十行,其实都是一条日志,我们通过时间戳来合并他们pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}'negate: truematch: after- type: logid: java-app2enabled: truepaths:- /usr/share/filebeat/datalog/java-app2/*.logfields:env: testapplication: java-app2log_type: app2_logignore_older: 168hmultiline:pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}'negate: truematch: after- type: logid: java-app4enabled: truepaths:- /usr/share/filebeat/datalog/java-app4/*.logfields:env: testapplication: java-app4log_type: app4_logignore_older: 168hmultiline:pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}'negate: truematch: afterprocessors: #解析处理器,可以拆分日志,或者增加字段等- add_fields:target: 'host'fields:ip: '172.23.165.185'output.elasticsearch:hosts: [ "http://172.23.165.185:9200", "http://172.23.165.186:9200", "http://172.23.165.187:9200" ]username: "elastic"password: "你的密码"index: "application-logs-%{[fields.env]}-%{[fields.application]}-%{+yyyy.MM.dd}" #自定义index名称,在kibana便于查找pipeline: "remove_specific_fields_pipeline" #管道,阻挡无用字段传输,比如我只需要host.ip,但是除了ip给我传输其他的一大堆,就需要管道拦截(当然不科学哈哈哈)
setup.kibana:host: "http://172.23.165.185:5601"username: "elastic"password: "你的密码"
而后在docker-compose.yml修改镜像迭代启动
查验信息
1.查看是否收到索引信息
终端输入:curl -u elastic:密码 -X GET “http://172.23.165.185:9200/_cat/indices?v&pretty”
2.浏览器输入:http://172.23.165.185:9200/_cat/indices?v&pretty
也可以登录es-head查看具体的索引信息
172.23.165.185:9100
在界面输入框输入url:
http://elastic:密码@172.23.165.185:9200/
metricbeat部署
创建配置文件
1.创建docker-compose.yml文件
version: '3'
services:metricbeat:build:context: .dockerfile: Dockerfileimage: docker.elastic.co/beats/metricbeat:7.10.0container_name: metricbeatprivileged: truenetwork_mode: hostenvironment:- TZ=Asia/Shanghaivolumes:- /var/run/docker.sock:/var/run/docker.sock:ro- /sys/fs/cgroup:/hostfs/sys/fs/cgroup:ro- /proc:/hostfs/proc:ro- /:/hostfs:ro
# - ./metricbeat.yml:/usr/share/metricbeat/metricbeat.yml:rw
# - ./data:/usr/share/metricbeat/data:rw
# - ./logs:/usr/share/metricbeat/logs:rw
# - ./modules.d:/usr/share/metricbeat/modules.d:rwenvironment:- ELASTICSEARCH_HOSTS=http://172.23.165.185:9200,http://172.23.165.186:9200,http://172.23.165.187:9200restart: always
# networks:
# - es-net#networks:
# es-net:
# external: true
2.创建Dockerfile文件
FROM docker.elastic.co/beats/metricbeat:7.10.0#COPY metricbeat.yml /usr/share/metricbeat/metricbeat.yml
一键启动
创建完文件后执行
docker-compose up -d
查看该容器是否正常启动
docker ps
启动正常后执行
docker -a cp metricbeat:/usr/share/metricbeat/data .
docker -a cp metricbeat:/usr/share/metricbeat/logs .
docker -a cp metricbeat:/usr/share/metricbeat/modules.d .
docker cp -a metricbeat:/usr/share/metricbeat/metricbeat.yml .
修改配置文件
1.取消docker-compose.yml的注释部分
即卷映射部分注释打开
2.取消Dockerfile的注释部分
即COPY metricbeat.yml /usr/share/metricbeat/metricbeat.yml
3.编写metricbeat.yml
刚刚我们将metricbeat.yml复制出来了,在本级目录编写修改
# metricbeat.yml
metricbeat.config.modules:path: /usr/share/metricbeat/modules.d/system.yml #采用默认采集模板reload.enabled: falsesetup.template.enabled: false
setup.ilm.enabled: false
setup.template.overwrite: true
setup.template.name: "system" #索引模板名称
setup.template.pattern: "system-*"
setup.template.settings:index.number_of_shards: 1index.codec: best_compressionlogging.level: info
logging.selectors: ["*"]setup.kibana:host: "http://172.23.165.185:5601"username: "elastic"password: "密码"output.elasticsearch:hosts: ["http://172.23.165.185:9200", "http://172.23.165.186:9200", "http://172.23.165.187:9200"]username: "elastic"password: "密码"index: "system-monitor-test-172.23.165.185-%{+yyyy.MM.dd}"processors: #这个部分可以自定义- add_host_metadata: ~- add_cloud_metadata: ~- add_docker_metadata: ~- script: #这个是过滤docker的ip,我们只采集宿主机的lang: javascriptid: "retain-first-ip"source: >function process(event) {var ip = event.Get("host.ip");if (ip && ip.length > 0) {event.Put("host.ip", [ip[0]]);}}- drop_fields: #这个是过滤这两个字段的,因为他们很占篇幅fields: ["host.mac", "host.os"]- add_fields: #这个是添加字段,比如测试、生产环境target: ''fields:env: 'test'monitoring:enabled: trueelasticsearch:hosts: ["http://172.23.165.185:9200", "http://172.23.165.186:9200", "http://172.23.165.187:9200"]username: "elastic"password: "密码"
4.编写system.yml(在metricbeat的modules.d)
给这个解除system.yml.disabled
# Module: system
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/7.10/metricbeat-module-system.html- module: systemperiod: 10smetricsets:- cpu- load- memory- network- process- process_summary- socket_summary#- entropy#- core#- diskio#- socket#- service#- usersprocess.include_top_n:by_cpu: 5 # include top 5 processes by CPUby_memory: 5 # include top 5 processes by memory- module: systemperiod: 1mmetricsets:- filesystem- fsstatprocessors:- drop_event.when.regexp:system.filesystem.mount_point: '^/(sys|cgroup|proc|dev|etc|host|lib|snap)($|/)'- module: systemperiod: 15mmetricsets:- uptime#- module: system
# period: 5m
# metricsets:
# - raid
# raid.mount_point: '/'
查验信息
1.查看是否收到索引信息
终端输入:curl -u elastic:密码 -X GET “http://172.23.165.185:9200/_cat/indices?v&pretty”
2.浏览器输入:http://172.23.165.185:9200/_cat/indices?v&pretty
也可以登录es-head查看具体的索引信息
172.23.165.185:9100
在界面输入框输入url:
http://elastic:密码@172.23.165.185:9200/