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: Dockerfile
image: docker.elastic.co/beats/filebeat:7.10.0
container_name: filebeat
privileged: true
environment:
- TZ=Asia/Shanghai
restart: 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:rw
networks:
- es-net
networks:
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: log
id: java-app1
enabled: true
paths:
- /usr/share/filebeat/datalog/java-app1/*.log #容器内的日志路径,我们通过volumes将容器外即你的宿主机的日志(想要采集的日志)映射进容器内
fields: #自定义预采集服务的各个字段
env: test
application: java-app1
log_type: app1_log
ignore_older: 168h #只采集最新7天的日志
multiline: #通过识别时间戳进行多行合并,例如个别日志报错会出现数十行,其实都是一条日志,我们通过时间戳来合并他们
pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}'
negate: true
match: after
- type: log
id: java-app2
enabled: true
paths:
- /usr/share/filebeat/datalog/java-app2/*.log
fields:
env: test
application: java-app2
log_type: app2_log
ignore_older: 168h
multiline:
pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}'
negate: true
match: after
- type: log
id: java-app4
enabled: true
paths:
- /usr/share/filebeat/datalog/java-app4/*.log
fields:
env: test
application: java-app4
log_type: app4_log
ignore_older: 168h
multiline:
pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}'
negate: true
match: after
processors: #解析处理器,可以拆分日志,或者增加字段等
- 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: Dockerfile
image: docker.elastic.co/beats/metricbeat:7.10.0
container_name: metricbeat
privileged: true
network_mode: host
environment:
- TZ=Asia/Shanghai
volumes:
- /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:rw
environment:
- ELASTICSEARCH_HOSTS=http://172.23.165.185:9200,http://172.23.165.186:9200,http://172.23.165.187:9200
restart: 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: false
setup.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: 1
index.codec: best_compression
logging.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: javascript
id: "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: true
elasticsearch:
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: system
period: 10s
metricsets:
- cpu
- load
- memory
- network
- process
- process_summary
- socket_summary
#- entropy
#- core
#- diskio
#- socket
#- service
#- users
process.include_top_n:
by_cpu: 5 # include top 5 processes by CPU
by_memory: 5 # include top 5 processes by memory
- module: system
period: 1m
metricsets:
- filesystem
- fsstat
processors:
- drop_event.when.regexp:
system.filesystem.mount_point: '^/(sys|cgroup|proc|dev|etc|host|lib|snap)($|/)'
- module: system
period: 15m
metricsets:
- 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/