swarm部署efk监控docker集群

前文提要,ES集群已经部署好了

不清楚的可以看下这里https://www.cnblogs.com/whitelittle/p/16358037.html

 

下面是部署filebeat和kibana

按照涉及思路,FILEBEAT需要部署在每一个节点上,收集日志,KIBana只需要在master上有一个进行展示即可,这样数据存储有ES集群,也保证了高可用

直接上YML

cat efk.yml

version: '3.7'
services:
  kibana:
    image: docker.elastic.co/kibana/kibana:7.4.2
    ports:
      - "5601:5601"
    networks:
      - dms
    volumes:
         - /home/www/docker/efk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
    deploy:
      placement:
        constraints:
          - node.hostname == master

  filebeat:
    image: docker.elastic.co/beats/filebeat:7.4.2
    networks:
      - dms
    user: root
    volumes:
        - /home/www/docker/efk/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
        - /home/docker/containers:/var/lib/docker/containers:ro
        - /var/run/docker.sock:/var/run/docker.sock:ro
    privileged: true
    deploy:
      replicas: 3
 
         
networks:
  #定义服务网桥名称
  dms:
    #指定网桥驱动,有bridge/overlay,默认是bridge
    driver: overlay
    #false-统自动创建网桥名,格式为: 目录名_网桥名,默认为false; true-使用外部创建的网桥,需要自己手动创建
    external: true
 
 
编写好配置文件后,需要编写filebeat的日志模板,以及Kibana的配置文件
 
###############kibana配置############################
 
#####----------kibana服务相关----------#####
 
#提供服务的端口,监听端口
server.port: 5601
 
 
#主机地址,可以是ip,主机名
server.host: 0.0.0.0
 
#在代理后面运行,则可以指定安装Kibana的路径
#使用server.rewriteBasePath设置告诉Kibana是否应删除basePath
#接收到的请求,并在启动时防止过时警告
#此设置不能以斜杠结尾
#server.basePath: ""
 
#指定Kibana是否应重写以server.basePath为前缀的请求,或者要求它们由反向代理重写,默认false
server.rewriteBasePath: false
 
#传入服务器请求的最大有效负载大小,以字节为单位,默认1048576
server.maxPayloadBytes: 1048576
 
#该kibana服务的名称,默认your-hostname
server.name: "kibana"
 
#服务的pid文件路径,默认/var/run/kibana.pid
#pid.file: /var/run/kibana.pid
 
 
#####----------elasticsearch相关----------#####
 
#kibana访问es服务器的URL,就可以有多个,以逗号","隔开
elasticsearch.hosts: ["http://172.20.69.232:9200"]
 
#当此值为true时,Kibana使用server.host设定的主机名
#当此值为false时,Kibana使用连接Kibana实例的主机的主机名
#默认ture
elasticsearch.preserveHost: true
 
#Kibana使用Elasticsearch中的索引来存储已保存的搜索,可视化和仪表板
#如果索引尚不存在,Kibana会创建一个新索引
#默认.kibana
kibana.index: ".kibana"
 
#加载的默认应用程序
#默认home
kibana.defaultAppId: "home"
 
 
#kibana访问Elasticsearch的账号与密码(如果ElasticSearch设置了的话)
elasticsearch.username: "kibana_system"
elasticsearch.password: "pass"
 
#从Kibana服务器到浏览器的传出请求是否启用SSL
#设置为true时,需要server.ssl.certificate和server.ssl.key
server.ssl.enabled: false
#server.ssl.certificate: /path/to/your/server.crt
#server.ssl.key: /path/to/your/server.key
 
 
#从Kibana到Elasticsearch启用SSL后,ssl.certificate和ssl.key的位置
#elasticsearch.ssl.certificate: /path/to/your/client.crt
#elasticsearch.ssl.key: /path/to/your/client.key
 
#PEM文件的路径列表
#elasticsearch.ssl.certificateAuthorities: [ "/path/to/your/CA.pem" ]
 
 
#控制Elasticsearch提供的证书验证
#有效值为none,certificate和full
elasticsearch.ssl.verificationMode: none
 
#Elasticsearch服务器响应ping的时间,单位ms
elasticsearch.pingTimeout: 1500
 
#Elasticsearch 的响应的时间,单位ms
elasticsearch.requestTimeout: 30000
 
 
#Kibana客户端发送到Elasticsearch的标头列表
#如不发送客户端标头,请将此值设置为空
elasticsearch.requestHeadersWhitelist: []
 
 
#Kibana客户端发往Elasticsearch的标题名称和值
elasticsearch.customHeaders: {}
 
#Elasticsearch等待分片响应的时间
elasticsearch.shardTimeout: 30000
 
#Kibana刚启动时等待Elasticsearch的时间,单位ms,然后重试
elasticsearch.startupTimeout: 5000
 
#记录发送到Elasticsearch的查询
elasticsearch.logQueries: false
 
 
 
#####----------日志相关----------#####
 
#kibana日志文件存储路径,默认stdout
logging.dest: stdout
 
#此值为true时,禁止所有日志记录输出
#默认false
logging.silent: false
 
#此值为true时,禁止除错误消息之外的所有日志记录输出
#默认false
logging.quiet: false
 
#此值为true时,记录所有事件,包括系统使用信息和所有请求
#默认false
logging.verbose: false
 
#####----------其他----------#####
 
#系统和进程取样间隔,单位ms,最小值100ms
#默认5000ms
ops.interval: 5000
 
#kibana web语言
#默认en
i18n.locale: "zh-CN"
 
 
中间很不少试错环节,这是我测试没问题的配置文件,ES填写一个节点就好,因为已经配置了集群,填写任意一个即可,如果填写三个节点,我测试后,配置文件GO模板不支持arry的数组数据类型报错
 
 
##############################FILEBEAT模板###################
 
setup.ilm.enabled: false
filebeat.inputs:
- type: docker
  containers.ids:
    - "*"
  containers.paths:
    - "/var/lib/docker/containers/${data.docker.container.id}/*.log"     #日志收集日志
  multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
  multiline.negate: false
  multiline.match: after


processors:
  - add_docker_metadata:
      host: "unix:///var/run/docker.sock"

setup.template.name: "docker"
setup.template.pattern: "docker-*"       #这里定义了kibana的索引模式
setup.template.enabled: false
# 如果是第一次则不需要, 如果 index-template 已经存在需要更新, 则需要
#setup.template.overwrite: false
setup.template.settings:
  index.number_of_shards: 2
  index.number_of_replicas: 0          #ES单节点的话必须设置0
output.elasticsearch:
  hosts: ["http://172.20.69.232:9200"]
  worker: 12
  # 单个elasticsearch批量API索引请求的最大事件数。默认是50。
  bulk_max_size: 400
  indices:
    - index: "docker-%{[container.name]}-%{+yyyy.MM.dd}"      #这里指定了写入到es的索引格式,docker-容器名-日期
 
同样,也只能填写一个节点,填写多个就识别不了,只要我们ES集群保持没问题就可以了
 
可以进入filebeat容器中,filebeat test config测试配置文件正确性
 
docker stack deploy -c efk.yml efk

[root@master ~]# docker stack ps efk
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
bgido9zu320z efk_filebeat.1 docker.elastic.co/beats/filebeat:7.4.2 node2 Running Running 15 minutes ago
rsifytwe4iza efk_kibana.1 docker.elastic.co/kibana/kibana:7.4.2 master Running Running 15 minutes ago
v24w0wm0nem8 efk_filebeat.2 docker.elastic.co/beats/filebeat:7.4.2 node1 Running Running 15 minutes ago
shr81pa54r8f efk_filebeat.3 docker.elastic.co/beats/filebeat:7.4.2 master Running Running 15 minutes ago

 

验证访问

http://xxxxxxxxxx:5601/,直接是中文界面

 

 

创建一个索引模式

 

 

 

 

 

 

设置默认即可
 

 

 

使用了几天,补充一下使用心得

匹配该索引所有

 

 

在KIBANA中进行ES检索,是以GET /<index>/_search   这种格式进行的检索,而上文中提到了,filebeat写入到ES的索引名称格式是

docker-容器名-日期,所以我们这里填写docker-后会自动补全,弹出所有索引名称

 

 按照条件匹配

GET /docker-redis_redis7003.1.fib6so8bol1yq7zjzope1cmq0-2022.06.20/_search
{
"query": {
"match": {
"@timestamp": "2022-06-20T06:53"
}
}
}

 

 

posted @ 2022-06-14 10:54  不敲代码  阅读(173)  评论(0)    收藏  举报