2018/4/28node
相信您也对如何监控容器化的业务感到烦恼,在此先强烈推荐您体验一下 swarmprom
这个演示方案,期待能帮助您打造出适合自身场景的监控方案git
Swarmprom is a starter kit for Docker Swarm monitoring with Prometheus, Grafana, cAdvisor, Node Exporter, Alert Manager and Unsee.github
简而言之,该方案是如下工具的组合:docker
caddy
网关,提供了基础的认证功能grafana
数据展现 http://<swarm-ip>:3000
prometheus
数据源 http://<swarm-ip>:9090
alertmanager
告警 http://<swarm-ip>:9093
unsee
告警看板 http://<swarm-ip>:9094
cAdvisor
容器 metrics 收集nodeExporter
主机 metrics 收集wechat
alertmanager
的告警 receiver
默认设置的是 slack
(这工具好用,只是你懂的,在国内网络用起来不方便)json
切换成 wechat
来接收告警,更符合国人的习惯vim
经过上述 2 个 PR 能够发现 wechat 相关的配置指南(文末简介)api
alertmanager/conf/alertmanager.yml
alertmanager/templates/wechat.tmpl
docker-compose.yml
alertmanager
的镜像为 prom
官方默认的的版本wechat
相关的配置其中,docker-compose.yml
变动的内容为:bash
alertmanager: image: prom/alertmanager:v0.14.0 networks: - net volumes: - alertmanager:/alertmanager - ./alertmanager/conf/alertmanager.yml:/etc/alertmanager/config.yml - ./alertmanager/templates:/etc/alertmanager/templates
示例中使用了一个脚本 start.sh
来简化操做网络
$ git clone https://github.com/opera443399/swarmprom.git $ cd swarmprom $ git checkout -b feat-alertmanager-receiver-wechat remotes/origin/feat-alertmanager-receiver-wechat ### 设置 wechat $ vim alertmanager/conf/alertmanager.yml ### 设置访问帐号 $ vim start.sh #!/bin/bash # ADMIN_USER='admin' \ ADMIN_PASSWORD='admin' \ docker stack deploy -c docker-compose.yml mon
请先确认 docker-compose.yml
中定义的 DOCKER_GWBRIDGE_IP
和 /var/lib/docker
是正确的值ide
##### 配置中默认的 `IP` 是 `172.18.0.1` 若是不一致请替换 # ip -o addr show docker_gwbridge 3: docker_gwbridge inet 172.18.0.1/16 scope global docker_gwbridge\ valid_lft forever preferred_lft forever ##### 查看 docker 的根目录 # docker info |grep 'Docker Root Dir' Docker Root Dir: /var/lib/docker
配置 docker 节点
##### 在 docker 的配置 `daemon.json` 中增长 `metrics-addr` 相关指令 ##### 请注意,为了在容器内经过 `DOCKER_GWBRIDGE_IP` 来收集数据,使用的 ip 不是 `127.0.0.1:9323` 而是 `0.0.0.0:9323` { "metrics-addr" : "0.0.0.0:9323", "experimental" : true }
启动监控 swarmprom
$ sh start.sh
<wechat_config>
# Whether or not to notify about resolved alerts. [ send_resolved: <boolean> | default = false ] # The API key to use when talking to the Wechat API. [ api_secret: <secret> | default = global.wechat_secret_url ] # The Wechat API URL. [ api_url: <string> | default = global.wechat_api_url ] # The corp id for authentication [ corp_id: <string> | default = global.wechat_api_corp_id ] # API request data as defined by the Wechat API. [ message: <tmpl_string> | default = '{{ template "wechat.default.message" . }}' ] [ agent_id: <string> | default = '{{ template "wechat.default.agent_id" . }}' ] [ to_user: <string> | default = '{{ template "wechat.default.to_user" . }}' ] [ to_party: <string> | default = '{{ template "wechat.default.to_party" . }}' ] [ to_tag: <string> | default = '{{ template "wechat.default.to_tag" . }}' ]
重点请关注这一行:
[ message: <tmpl_string> | default = '{{ template "wechat.default.message" . }}' ]
这个默认的 message 的模版来源:
https://github.com/prometheus/alertmanager/blob/master/template/default.tmpl
是的,已经被合并到 master 上啦。
其中,定义的默认 message
格式为:
{{ define "__subject" }}[{{ .Status | toUpper }}{{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{ end }}] {{ .GroupLabels.SortedPairs.Values | join " " }} {{ if gt (len .CommonLabels) (len .GroupLabels) }}({{ with .CommonLabels.Remove .GroupLabels.Names }}{{ .Values | join " " }}{{ end }}){{ end }}{{ end }} {{ define "__text_alert_list" }}{{ range . }}Labels: {{ range .Labels.SortedPairs }} - {{ .Name }} = {{ .Value }} {{ end }}Annotations: {{ range .Annotations.SortedPairs }} - {{ .Name }} = {{ .Value }} {{ end }}Source: {{ .GeneratorURL }} {{ end }}{{ end }} {{ define "wechat.default.message" }}{{ template "__subject" . }} {{ .CommonAnnotations.SortedPairs.Values | join " " }} {{ if gt (len .Alerts.Firing) 0 -}} Alerts Firing: {{ template "__text_alert_list" .Alerts.Firing }} {{- end }} {{ if gt (len .Alerts.Resolved) 0 -}} Alerts Resolved: {{ template "__text_alert_list" .Alerts.Resolved }} {{- end }} AlertmanagerUrl: {{ template "__alertmanagerURL" . }} {{- end }}
您也能够自定义 message
来格式化数据实例,请参考示例:
$ vim alertmanager/templates/wechat.tmpl