docker容器监控系统

第1章监控软件介绍

1.1监控工具

  • 国外:Mrtg、cacti、Nagios、Zabbix、smokeping、ganglia
  • 国内:小米监控,夜莺系统(滴滴打车)
  • 原理是让主库处写相关操作,而从数据库处理select查询,从而减轻数据库的IO压力,避免误操作将数据写入从库而导致数据不一致。

第2章Cadvisor+Influxdb+Grafana

2.1Cadvisor+InfluxDB+Grafana介绍

2.1.1Cadvisor(数据采集)

  • Cadvisor是由google开发出来的单节点资源信息的监控工具。方便其他组件如Granfana、Prometheus
    进行数据抓取,可以对主机上的资源及容器和性能数据进行监控。它使用Go语言开发,采用Linux中Cgroup获取容器资源信息。

  • Google的Kubernetes中也默认将其作为单点的资源监控工具,各节点默认安装Cadvisor。

  • 产品特点:
    1)可以展示主机和容器两个层次的监控数据;
    2)可以展示历史变化数据;
    3)谷歌公司的开源产品;
    4)监控指标齐全;
    5)方便部署,有官方的docker镜像;
    6)(缺点)默认只在保存1分钟数据,可以集成InfluxDB(解决存储问题)等第三方存储使用。
    Cadvisor操作界面简陋,并且需要在不同页面跳转,只能监控一个host,但是可以将监控数据导出给第三方工具,所以值只作为一个数据采集器。

2.1.2InfluxDB(数据存储)

  • InfluxDB是非关系型数据库,时序性数据库(开源)由Go语言开发。它可以高性能的查询与存储时序性数据,被广泛用于存储系统的监控数据。
  • 应用场景:性能监控、应用程序指标、物联网传感器数据和实时分析等的后端存储。
  • 主要功能:
    1)基于时间序列,支持与时间有关的相关函数 (如最大、最小、求和等);
    2)可度量行:可以实时计算大量数据;
    3)基于事件:支持任意的时间数据。
  • 主要特点:
    1)无结构(无模式):可以是任意数量的列;
    2)支持拓展;
    3)支持min、max、sum、count、mean、median 等一系列函数,方便统计;
    4)原生的HTTP支持,内置HTTP API;
    5)强大的类SQL语法;
    6)自带管理界面,方便使用。

2.1.3Granfana(数据展现)

  • Granfana是一个可视化面板(Dashboard)工具,图表和布局漂亮,有功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus和OpenTSDB等组件作为数据源。
  • Granfana主要特性:
    1)灵活丰富的图形化选项;
    2)可以混合多种风格;
    3)支持白天和夜间模式;
    4)支持多个数据源。

2.2监控组件架构

在这里插入图片描述

部署方案:
1)创建自定义网络monitor(自定义网络名称),用于后期容器加入此网络中;
2)创建InfluxDB容器,创建数据用户、数据库;
3)创建Cadvisor容器;
4)创建Granfana容器,配置granfana。

2.3具体部署

2.3.1安装docker-ce

[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@docker ~]# yum makecache fastyum makecache fast
[root@docker ~]# yum -y install wget
[root@docker ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@docker ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@docker ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@docker ~]# yum -y install docker-ce
[root@docker ~]# service docker start

2.3.2镜像加速器

sudo mkdir -p /etc/docker  //一般都有,就不用创建了
tee /etc/docker/daemon.json <<-'EOF' 
{
 "registry-mirrors": ["https://naa7mog3.mirror.aliyuncs.com"] 
}
 EOF
systemctl daemon-reload 
systemctl restart docker
[root@docker ~]# systemctl start docker
[root@docker ~]# systemctl enable docker  //开机自启
[root@docker ~]# docker info  //查看环境信息
[root@docker ~]# docker version //查看环境信息

2.3.3下载组件镜像

[root@docker ~]# docker pull tutum/influxdb
[root@docker ~]# docker pull gogle/cadvisor
[root@docker ~]# docker pull grafana/grafana
[root@docker ~]# docker images

在这里插入图片描述

2.3.4创建自定义网络

[root@docker ~]# docker network create monitor  //创建网络monitor
[root@docker ~]# docker network ls  //查看
[root@docker ~]# docker run -d --name influxdb --net monitor -p 8083:8083 -p 8086:8086 tutum/influxdb
[root@docker ~]# docker ps -l

访问测试

在这里插入图片描述

可以自行选择模板

2.3.5创建数据库和数据库用户

CREATE USER "root" WITH PASSWORD '123456' WITH ALL PRIVILEGES

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3.6创建Cadvisor容器

[root@docker ~]# docker run -d --volume=/:/rootfs:ro --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro --net monitor --publish=8080:8080 --name=cadvisor google/cadvisor -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb:8086
  • –mout:把宿主机的相文目录绑定到容器中,这些目录都是Cadvisor需要采集的目录文件和监控内容;
  • -storage_driver:指定Cadvisor的存储驱动、数据库主机、数据库名。
[root@docker ~]# docker ps -l

访问测试
在这里插入图片描述

下拉可以看到宿主机(linux)信息,点击蓝字docker container可以看到容器信息。
在这里插入图片描述

也可以自行创建容器检测。这里不做演示。

2.3.7创建Grafana容器

[root@docker ~]# docker run -d --name grafana --net monitor -p 3000:3000 grafana/grafana
[root@docker ~]# docker ps -l

访问测试,首次访问用户名和密码都是admin,之后修改密码(123456)。
在这里插入图片描述

添加数据源influxdb
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点save,画错了。。。。。
在这里插入图片描述

第3章Cadvisor+Prometheus+Grafana

3.1部署Cadvisor

[root@docker ~]# docker rm -f $(docker ps -aq)   //删除之前做的
[root@docker ~]# docker run -d --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 

登录测试 192.168.9.9:8080

3.2Prometheus 介绍

  • Prometheus是一个开源系统监控和警报工具包,现在是一个独立的开源项目。它在2016年加入CNCF(Cloud Native Computing Foundation云原生),是kubernetes之后的第二个托管项目。
  • 主要特征:
    1)多维度数据模型,由指标键值对标识的时间序列数据组成;
    2)PromQL,一种灵活的查询语言;
    3)不依赖分布式存储,单个服务器节点是自治的;
    4)以HTTP方式,通过pull模型拉取时间序列数据;
    5)支持通过中间网关推送时间序列数据;
    6)通过服务发现或者静态配置,来发现目标服务对象;
    7)支持多种多样的图表和界面展示。

3.3Prometheus 部署

[root@docker ~]# docker pull prom/prometheus
[root@docker ~]# vim /tmp/prometheus.yml
# my global config
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.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'docker'      
    static_configs:
   - targets: ['192.168.9.9:8080']

targets后面可以添加多个IP,用逗号分隔。

[root@docker ~]# docker run -d --name=prometheus -p 9090:9090 -v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml -v /etc/localtime:/etc/localtime prom/prometheus
[root@docker ~]# docker ps -l

访问测试(192.168.9.9:9090)
在这里插入图片描述

status,targets查看主机状态
在这里插入图片描述
在这里插入图片描述

点击url查看详细信息

在这里插入图片描述
在这里插入图片描述

界面难看,所以结合grafana使用。

3.4部署Grafana

[root@docker ~]# docker run -d --name=grafana -p 3000:3000 grafana/grafana

和前面一样做。添加数据源,出图或者调用模板。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选择prometheus然后点击import即可。
在这里插入图片描述

若要采集多个多个宿主机,就在/tmp/prometheus.yml最后添加主机IP,用逗号分隔。

3.5 CIG与CPG的区别

若有docker,则二选一。
若部署kubernetes,则选择Cadvisor+Prometheus+Grafana环境。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值