prometheus 监控原理
1、prometheus :虽然说是监控平台,但是实际上是一套数据库
2、mysql_exporter: 可以理解成程序或者软件,他是工作在我们要监控的目标服务器上,主要是用于监控mysql的数据。
3、node_exporter: 他的作用主要是收集性能测试的数据,如cpu、内存磁盘网络等信息,然后将数据保存到prometheus,相当于将数据存入到数据库中。
4、prometheus 只能用于做数据存储,不能做展示,因此我们需要用到grafana组件。
5、grafana 主要是用于数据展示,并且可以做到定时读取数据
1、只有一台服务器,所以使用docker来进行试验
#安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
#查看安装版本
docker --version
#查看安装是否成功
docker ps -a
如果报以下错误,是因为docker没启动
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
#启动docker
systemctl restart docker
#查看docker
docker ps -a
#输出
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2、安装普罗米修斯
Prometheus Server
Prometheus组件中的核心部分,收集和存储时间序列数据,提供PromQL查询语言的支持。内置的 Express Browser UI,通过这个 UI 可以直接通过 PromQL 实现数据的查询以及可视化。
Exporters
将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可以获取到需要采集的监控数据
PushGateway
主要是实现接收由 Client push 过来的指标数据,在指定的时间间隔,由主程序来抓取。由于 Prometheus 数据采集基于 Pull 模型进行设计,因此在网络环境的配置上必须要让 Prometheus Server 能够直接与 Exporter 进行通信。当这种网络需求无法直接满足时,就可以利用 PushGateway 来进行中转。可以通过 PushGateway 将内部网络的监控数据主动 Push 到 Gateway 当中。而 Prometheus Server 则可以采用同样 Pull 的方式从 PushGateway 中获取到监控数据。
Alertmanager
管理告警,主要是负责实现报警功能。在 Prometheus Server 中支持基于 PromQL 创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由 AlertManager 进行管理。在 AlertManager 中我们可以与邮件,Slack 等等内置的通知方式进行集成,也可以通过 Webhook 自定义告警处理方式。AlertManager 即 Prometheus 体系中的告警处理中心
docker 拉取镜像
#下载镜像
#收集服务器硬件和操作系统信息(被监控)
docker pull prom/node-exporter
#收集mysql使用情况数据信息
docker pull prom/mysqld-exporter
#负责收集服务器运行的docker容器信息(被监控)
docker pull google/cadvisor
#普罗米修斯监控服务
docker pull prom/prometheus
#用于展示普罗米修斯监控的图形化界面
docker pull grafana/grafana
拉取镜像结束
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
grafana/grafana latest e9fdff47a6dd 7 days ago 293MB
prom/prometheus latest 8c01021bb2f4 2 weeks ago 211MB
prom/mysqld-exporter latest 121b8a7cd052 4 months ago 17.8MB
prom/node-exporter latest 1dbe0e931976 7 months ago 20.9MB
google/cadvisor latest eb1210707573 3 years ago 69.6MB
安装监控
# 安装Node Exporter 来收集硬件信息
docker run -d -p 9100:9100 \
-v "/proc:/host/proc" \
-v "/sys:/host/sys" \
-v "/:/rootfs" \
-v "/etc/localtime:/etc/localtime" \
--net=bridge \
prom/node-exporter \
--path.procfs /host/proc \
--path.sysfs /host/sys \
--collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
# 安装cAdvisor 来收集容器信息 所有节点运行以下命令来安装cAdvisor
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 \
--privileged=true \
-v "/etc/localtime:/etc/localtime" \
google/cadvisor:latest
# 查看docker的ip地址
ifconfig | grep -A 1 docker0
# prometheus.yml的内容如下
# 其中targets中的网址是对应服务器所在的地址
global:
scrape_interval: 20s
evaluation_interval: 20s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
labels:
instance: 'prometheus'
- job_name: 'linux'
static_configs:
- targets: ['localhost:9100']
- job_name: 'cadvisor'
static_configs:
- targets: ['localhost:8080']
# 创建prometheus容器
docker run -itd --name prometheus -p 9090:9090 \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /opt/prometheus/rules/:/etc/prometheus/rules/ \
-v /etc/localtime:/etc/localtime:ro \
prom/prometheus
在DockerMachine上运行Grafana, http://机器地址:3000,登录用admin 密码为刚创建Grafana时的admin8888,
docker run -d -i -p 3000:3000 \
-v "/etc/localtime:/etc/localtime" \
-e "GF_SERVER_ROOT_URL=http://grafana.server.name" \
-e "GF_SECURITY_ADMIN_PASSWORD=admin8888" \
--net=bridge \
grafana/grafana
验证安装是否成功
浏览器访问:http://promethus所在的服务器地址:9090