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 == masterfilebeat: 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-*" setup.template.enabled: false # 如果是第一次则不需要, 如果 index-template 已经存在需要更新, 则需要 #setup.template.overwrite: false setup.template.settings: index.number_of_shards: 2 index.number_of_replicas: 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 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://172.20.69.232:5601/,直接是中文界面
创建一个索引模式
设置默认即可
标签:false,kibana,server,swarm,efk,elasticsearch,Kibana,docker 来源: https://www.cnblogs.com/whitelittle/p/16373800.html