构建Docker容器监控系统

在对容器进行测试和运维的过程中,经常需要对其进行监控,监控信息的主要来源就是日志。

Prometheus

Prometheus 是系统监控常用的工具。该项目最初是在SoundCloud上进行构建,由前google员工开发。为了让项目得到更多的关注,也是为了吸引更多的开发者对其进行完善,项目的开发者于 2012年对其进行开源,并于2016年加入CNCF,从而使其成为了继k8s之后的第二个托管项目。

Prometheus主要有以下特性:

  1. 多维数据模型:每条数据是包括度量名称和健值对标示的时间序列数据。例如对docker系统进行监控的过程中,获得了一下数据,其中metrics为container_cpu_user_seconds_total,一个健值对为image="goharbor/harbor-portal:v1.9.1"

container_cpu_user_seconds_total{container_label_build_date="20190906",container_label_com_docker_compose_config_hash="e9b74016b82d3dcef80df09387bcea54c6f96c1727a18a4df88bdcb4e9e4e8e4",container_label_com_docker_compose_container_number="1",container_label_com_docker_compose_oneoff="False",container_label_com_docker_compose_project="harbor",container_label_com_docker_compose_service="portal",container_label_com_docker_compose_version="1.24.1",container_label_maintainer="",container_label_name="Photon OS 2.0 Base Image",container_label_vendor="VMware",id="/docker/b84902ed5f168c2e17e9fca0328d5bbe12c87a7a24e646bc514715d46e5965f1",image="goharbor/harbor-portal:v1.9.1",name="harbor-portal"} 60.99

  1. PromSQL:灵活性查询语言,可以利用多维数据完成复杂的查询。
  2. 不依赖分布式存储,单个服务器节点可以直接工作。对部署环境的要求较低。
  3. 基于Http的pull方式采集时间序列数据。很多监控对象本身没有提供http的接口,Prometheus的生态系统中有许多工具可以为其他形式的日志提供http接口。
  4. 推送时间序列数据通过PushGateway组件支持,临时性的任务,减少开销。
  5. 通过服务发现或静态配置发现目标,在k8s中较为常用。
  6. 多种图形模式及仪表盘支持。事实上,Prometheus本身的仪表盘并不是很出众,可以通过集成其他的工具取得更加丰富生动的展示效果。

架构

pro_framework.png

short-lived jobs:短任务。
jobs/exporters:长期任务,可以用于收集nginx,mysql等服务的日志。
service discovery:自动发现监控对象,在k8s中经常使用。
Alertmanager:用于报警。Prometheus本身不支持报警,需要集成其他插件。
promQL:基于promQL,可以通过grafana增强展示效果。

用docker安装Prometheus

docker pull prom/Prometheus

运行容器

docker run -d -p 9090:9090 prom/Prometheus

此时容器还不能使用,因为还没有为其提供配置文件。可以从容器内copy出配置文件:

cd /opt
docker cp <CONTAINER_ID>:/etc/prometheus/prometheus.yml ./

删除原容器,并重新启动,这一次将本地的配置文件bind入容器:

docker run -d -p 9090:9090 -v /opt/prometheus.yml:/etc/prometheus/prometheus.yml  prom/prometheus

配置文件的主要内容:
global:全局配置,采集时间间隔等等

global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.

rules:阈值有没有达到,如果阈值达到就报警

rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

默认情况下,Prometheus监控自己。

访问

http://<HOSTNAME>:9090/


prom_ui.png
  • alerts:报警
  • graph:SQL语句
  • Status:pro本身的情况

cAdvisor

Prometheus不支持直接采集docker容器内日志 ,因为它只能从http接口获得信息,而docker容器默认情况下不提供日志的http接口。cAdvisor(container advisor)是Google的开源项目,用于收集正在运行的容器资源使用和性能信息,并对外提供http接口。

docker安装

docker run   --volume=/:/rootfs:ro   --volume=/var/run:/var/run:ro   --volume=/sys:/sys:ro   --volume=/var/lib/docker/:/var/lib/docker:ro   --volume=/dev/disk/:/dev/disk:ro   --publish=8080:8080   --detach=true   --name=cadvisor   google/cadvisor:latest

访问UI

http://<HOSTNAME>:8080/


cAdvisor_ui.png

HTTP API

http://<HOSTNAME>:8080/metrics

修改Prometheus的配置文件/opt/prometheus.yml,添加一个job

- job_name: 'docker'
static_configs:
- targets: ['<HOSTNAME>:8080']
static_configs表示是手动配置。

重启Prometheus容器

docker restart 8a8d08043423

重新访问Prometheus,中已经能看到容器的metrics了:


prom_docker.png

Grafana

Grafana是一个开源的度量分析和可视化系统。

Docker安装

docker run -d --name=grafana -p 3000:3000 grafana/grafana

访问UI

http://<HOSTNAME>:3000/


grafana_ui.png

登录并修改管理员密码:
admin/admin->admin/Welcome1@

添加数据源

data sources,

  1. 选择prom
  2. http url http://<HOSTNAME>:9090
  3. save & test

还可以添加各种各样的数据源

grafana_dbsource.png

添加仪表盘

create->dashboard
可以导入模版,Grafana官网提供了许多模版以供使用。
https://grafana.com/grafana/dashboards
这里我选择了
https://grafana.com/grafana/dashboards/193
现在可以在Grafana的dashboard中看到和修改视图了:

grafana_edit.png

【1】https://prometheus.io/
【2】https://github.com/google/cadvisor
【3】https://grafana.com/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容