文章目录
- 第1章监控软件介绍
- 1.1监控工具
- 第2章Cadvisor+Influxdb+Grafana
- 2.1Cadvisor+InfluxDB+Grafana介绍
- 2.1.1Cadvisor(数据采集)
- 2.1.2InfluxDB(数据存储)
- 2.1.3Granfana(数据展现)
- 2.2监控组件架构
- 2.3具体部署
- 2.3.1安装docker-ce
- 2.3.2镜像加速器
- 2.3.3下载组件镜像
- 2.3.4创建自定义网络
- 2.3.5创建数据库和数据库用户
- 2.3.6创建Cadvisor容器
- 2.3.7创建Grafana容器
- 第3章Cadvisor+Prometheus+Grafana
- 3.1部署Cadvisor
- 3.2Prometheus 介绍
- 3.3Prometheus 部署
- 3.4部署Grafana
- 3.5 CIG与CPG的区别
第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环境。