美文网首页Docker容器程序园
构建Docker容器监控系统

构建Docker容器监控系统

作者: 赵阳_c149 | 来源:发表于2019-10-30 15:26 被阅读0次

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

    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/

    相关文章

      网友评论

        本文标题:构建Docker容器监控系统

        本文链接:https://www.haomeiwen.com/subject/iziovctx.html