1、安装Docker
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
Docker 包括三个基本概念:
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比
如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker架构如图下图所示:
Docker最直接便捷的安装方式就是使用官方安装脚本自动安装:
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
检验:
使用国内Docker镜像仓库,配置Docker镜像加速:
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
重启Docker:
service docker restart
检验是否成功:
docker info
2、Docker安装prometheus以及grafana:
Prometheus 是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。
作为新一代的监控框架,Prometheus 具有以下特点:
强大的多维度数据模型:
时间序列数据通过 metric 名和键值对来区分。
所有的 metrics 都可以设置任意的多维标签。
数据模型更随意,不需要刻意设置为以点分隔的字符串。
可以对数据模型进行聚合,切割和切片操作。
支持双精度浮点类型,标签可以设为全 unicode。
灵活而强大的查询语句(PromQL):在同一个查询语句,可以对多个 metrics
进行乘法、加法、连接、取分数位等操作。
易于管理: Prometheus server 是一个单独的二进制文件,可直接在本地工
作,不依赖于分布式存储。
高效:平均每个采样点仅占 3.5 bytes,且一个 Prometheus server 可以处理
数百万的 metrics。
使用 pull 模式采集时间序列数据,这样不仅有利于本机测试而且可以避免
有问题的服务器推送坏的 metrics。
可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server
端。
可以通过服务发现或者静态配置去获取监控的 targets。
有多种可视化图形界面。
易于伸缩。
Prometheus架构:
Prometheus Server: 用于收集和存储时间序列数据。
Client Library: 客户端库,为需要监控的服务生成相应的 metrics 并暴露给
Prometheus server。当 Prometheus server 来 pull 时,直接返回实时状态的 metrics。
Push Gateway: 主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在
Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server 端推送它们的 metrics。这种方式主要用于服务层面的 metrics,对于机器层面的 metrices,需要使用 node exporter。
Exporters: 用于暴露已有的第三方服务的 metrics 给 Prometheus。
Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去除重复数
据,分组,并路由到对收的接受方式,发出报警。常见的接收方式有:电子邮件,pagerduty,OpsGenie, webhook 等.
Docker安装prometheus
将prometheus.yml放置在/path/prometheus文件目录下,
文件内容如下:
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Defaul
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is eve
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
Docker命令启动:
docker run -d --name=prometheus --restart=always\
-p 9090:9090 \
-v /path/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
查看运行状态:
浏览器访问hostip:9090,出现以下界面说明安装成功。
查看prometheus server自身的监控数据,hostip:9090/metrics
Docker安装grafana,命令如下:
Docker run -d --name=grafana --restart=always -p 3000:3000 grafana/grafana
查看docker containers列表
初次使用账号admin,密码admin登录:
添加prometheus server的数据库data source:
输入prometheus地址后保存测试能否检测到:
导入prometheus的dashboard:
返回Home主页,查看prometheus监控数据界面:
3、prometheus监控openstack云服务平台
Docker安装openstack的监控exporter(相当于数据采集器),
Openstack的api接口信息如下:
创建admin.novarc文件内容如下:
OS_PROJECT_DOMAIN_NAME=Default
OS_USER_DOMAIN_NAME=Default
OS_PROJECT_NAME=admin
OS_USERNAME=admin
OS_PASSWORD=admin
OS_IDENTITY_API_VERSION=3
OS_AUTH_URL=http://192.168.30.54/identity/v3
Docker命令启动:
docker run -itd \
--name=openstack -p 9183:9183\
--env-file=$(pwd)/admin.novarc\
--restart=unless-stopped moghaddas/prom-openstack-exporter
采集数据端口9183:
在prometheus server的配置文件中加入target:
在grafana中导入官方opensatck监控仪表盘,编号是7924:
监控
选择数据库:
进入仪表盘:
4、prometheus监控openstack的宿主机:
Docker安装node-exporter:
docker run -d \
--net="host" \
--pid="host" \
--name node-exporter \
-v "/:/host:ro,rslave" \
quay.io/prometheus/node-exporter \
--path.rootfs /host
查看运行状态:
查看监控数据:
在prometheus配置中添加任务job任务,然后在grafana中导入node-exporter仪表盘(编号11207),查看监控仪表盘: