前言

Prometheus

Prometheus 是有 SoundCloud 开发的开源监控系统和时序数据库,基于 Go 语言开发。通过基于 HTTP 的 pull 方式采集时序数据,通过服务发现或静态配置去获取要采集的目标服务器,支持多节点工作,支持多种可视化图表及仪表盘。

贴一下官方提供的架构图:

Pormetheus 几个主要模块有,Server,Exporters,Pushgateway,PromQL,Alertmanager,WebUI等,主要逻辑如下:

  • Prometheus server 定期从静态配置的 targets 或者服务发现的 targets 拉取数据。
  • 当新拉取的数据大于配置内存缓存区时,Prometheus 会将数据持久化到磁盘(如果使用 remote storage 将持久化到云端)。
  • Prometheus 配置 rules,然后定时查询数据,当条件触发时,会将 alert 推送到配置的 Alertmanager。
  • Alertmanager 收到警告时,会根据配置,聚合、去重、降噪等操作,最后发送警告。
  • 可以使用 API,Prometheus Console 或者 Grafana 查询和聚合数据。

Grafana

Grafana 是一个开源的度量分析及可视化套件。通过访问数据库(如InfluxDB、Prometheus),展示自定义图表。

Exporter

Exporter 是 Prometheus 推出的针对服务器状态监控的 Metrics 工具。目前开发中常见的组件都有对应的 exporter 可以直接使用。常见的有两大类,一种是社区提供的,包含数据库,消息队列,存储,HTTP服务,日志等,比如 node_exporter,mysqld_exporter等;还有一种是用户自定义的 exporter,可以基于官方提供的 Client Library 创建自己的 exporter 程序。

每个 exporter 的一个实例被称为 target,Prometheus 通过轮询的方式定期从这些 target 中获取样本数据。

原理简介

安装数据收集器 node-exporter

安装 node-exporter

cd /opt
wget https://github.com/prometheus/node_exporter/releases/download/v1.4.0-rc.0/node_exporter-1.4.0-rc.0.linux-amd64.tar.gz
tar xvf node_exporter-1.4.0-rc.0.linux-amd64.tar.gz
mv node_exporter-1.4.0-rc.0.linux-amd64 node_exporter
mv node_exporter /usr/local/

运行如下命令测试 node-exporter 收集器启动情况,正常情况下会输出服务端口。

/usr/local/node_exporter/node_exporter

添加到系统服务

vim /etc/systemd/system/node_exporter.service

添加如下内容

[Unit]
Description=mysqld_exporter
After=network.target
[Service]
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

加载并重启服务

# 加载配置
systemctl daemon-reload
# 启动服务
systemctl restart node_exporter.service
# 查看服务状态
systemctl status node_exporter.service
# 配置开机启动
systemctl enable node_exporter.service

查看数据收集情况

重新起一个终端,查看数据收集情况。也可以在浏览器中查看。

curl http://127.0.0.1:9100/metrics

安装 prometheus 和 grafana

安装 docker&docker-compose

本文介绍的安装方法是基于 docker-compose 的,所以需要先安装相关 docker 环境。相关方法可以见笔者的其他文章,本文中不做详细介绍。

安装 prometheus 和 grafana

可以直接 clone 这个项目来快速搭建:

https://github.com/FX-Max/docker-install-everything/tree/master/prometheus

该项目是笔者弄的一个使用 docker-compose 搭建软件开发常见服务的项目,大家觉得有帮助,可以帮忙点个 star,感谢。

根据实际情况,修改 prometheus.yml 文件中的内容,将ip修改为上面安装了 node-exporter 的服务器ip即可。

然后在该目录下执行 docker-compose up -d即可,docker ps查看服务启动情况。

CONTAINER ID   IMAGE              COMMAND                  CREATED        STATUS        PORTS                                      NAMES
6f360e9ab242 grafana/grafana "/run.sh" 25 hours ago Up 25 hours 0.0.0.0:3000->3000/tcp, :::3000->3000/tcp grafana
97b92b65aca6 prom/prometheus "/bin/prometheus --c…" 25 hours ago Up 21 hours 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp prometheus
3f5906f07bf6 prom/pushgateway "/bin/pushgateway" 25 hours ago Up 25 hours 0.0.0.0:9091->9091/tcp, :::9091->9091/tcp pushgateway
f556168c1b8b prom/alertmanager "/bin/alertmanager -…" 25 hours ago Up 25 hours 0.0.0.0:9093->9093/tcp, :::9093->9093/tcp alertmanager

docker-compose.yml 内容:

version: "3"
services:
prometheus:
image: prom/prometheus
container_name: prometheus
user: root
# restart: always
ports:
- "9090:9090"
volumes:
- ./conf/prometheus:/etc/prometheus
- ./data/prometheus/prometheus_db:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
networks:
- net-prometheus grafana:
image: grafana/grafana
container_name: grafana
user: root
# restart: always
ports:
- "3000:3000"
volumes:
#- ./conf/grafana:/etc/grafana
- ./data/prometheus/grafana_data:/var/lib/grafana
depends_on:
- prometheus
networks:
- net-prometheus pushgateway:
image: prom/pushgateway
container_name: pushgateway
user: root
# restart: always
ports:
- "9091:9091"
volumes:
- ./data/prometheus/pushgateway_data:/var/lib/pushgateway alertmanager:
image: prom/alertmanager
hostname: alertmanager
container_name: alertmanager
user: root
# restart: always
ports:
- "9093:9093"
volumes:
- ./data/prometheus/alertmanager_data:/var/lib/alertmanager networks:
net-prometheus:

prometheus.yml 内容:

global:
scrape_interval: 5s
evaluation_interval: 5s external_labels:
monitor: 'dashboard' alerting:
alertmanagers:
- static_configs:
- targets:
- "alertmanager:9093" rule_files:
#- 'alert.rules' scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['prometheus:9090'] - job_name: node
static_configs:
- targets: ['192.168.0.103:9100','pushgateway:9091'] - job_name: 'mysql-131'
static_configs:
- targets: ['192.168.0.131:9104']
labels:
instance: mysql

查看 prometheus

访问 http://127.0.0.1:9090/targets,效果如下,上面我们通过 node_exporter 收集的节点状态是 up 状态。

配置 Grafana

访问 http://127.0.0.1:3000,登录 Grafana,默认的账号密码是 admin:admin,首次登录需要修改默认密码。

按照如下添加 data sources,将 prometheus 添加到 data sources 中。







添加 prometheus 服务地址,此处由于服务是基于 docker-compose 构建的,没有填写ip,直接填写服务名即可。

添加监控模版

输入官方模版 id,1860,点击 load。然后按照下图选择确认即可。

导入成功后,会自动跳转到监控面板页面,如下图。

结语

本文简单介绍了 prometheus + grafana 服务搭建流程,初步跑通了整个服务。当然它还有很多功能,后续笔者会开新的文章来分享。

参考文档

官方模板库:https://grafana.com/grafana/dashboards/

node 模板:https://grafana.com/grafana/dashboards/1860

MySQL 模板:https://grafana.com/grafana/dashboards/7362

docker 搭建 prometheus&grafana:https://blog.51cto.com/keep11/4261521

Prometheus+Grafana监控-基于docker-compose搭建的更多相关文章

  1. 基于Docker Compose搭建mysql主从复制(1主2从)

    系统环境 * 3 Ubuntu 16.04 mysql 8.0.12 docker 18.06.1-ce docker-compose 1.23.0-rc3 *3 ==> PS  ###我用的是 ...

  2. Docker Compose 搭建 Redis Cluster 集群环境

    在前文<Docker 搭建 Redis Cluster 集群环境>中我已经教过大家如何搭建了,本文使用 Docker Compose 再带大家搭建一遍,其目的主要是为了让大家感受 Dock ...

  3. Docker搭建Prometheus+grafana监控系统

    一.Prometheus简介 1.简介 Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB). Prometheus使用Go语言开发,是Google BorgM ...

  4. cAdvisor+Prometheus+Grafana监控docker

    cAdvisor+Prometheus+Grafana监控docker 一.cAdvisor(需要监控的主机都要安装) 官方地址:https://github.com/google/cadvisor ...

  5. Prometheus + Grafana 监控系统搭

    本文主要介绍基于Prometheus + Grafana 监控Linux服务器. 一.Prometheus 概述(略) 与其他监控系统对比 1 Prometheus vs. Zabbix Zabbix ...

  6. Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh

    本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...

  7. [转帖]Prometheus+Grafana监控Kubernetes

    原博客的位置: https://blog.csdn.net/shenhonglei1234/article/details/80503353 感谢原作者 这里记录一下自己试验过程中遇到的问题: . 自 ...

  8. 使用Docker Compose搭建Service Mesh

    使用Docker Compose搭建Service Mesh 本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于 ...

  9. 部署Prometheus+Grafana监控

    Prometheus 1.不是很友好,各种配置都手写 2.对docker和k8s监控有成熟解决方案 Prometheus(普罗米修斯) 是一个最初在SoudCloud上构建的监控系统,开源项目,拥有非 ...

随机推荐

  1. Git使用 - 忽略特定文件 - gitignore

    1. 背景 2. 创建.gitignore 文件 3. 文件内容样式 4. exclude文件 5. gitignore 文件模板 6. 参考文档 1. 背景 前提知识:在工作目录下的每一个文件都不外 ...

  2. MCDF实验2

    ​  目录 接口的使用 仿真的结束 类的例化和类的成员 接口的使用 问题1.1:可以看到之前的实验 channel initiator 发送的数据例如 valid 和 data 与时钟 clk 均在同 ...

  3. 6.文本三剑客之sed

    文本三剑客之sed 目录 文本三剑客之sed sed编辑器 sed概述 sed工作流程 sed用法 sed打印 sed删除 sed替换 sed增加行内容 sed剪切粘贴与复制粘贴 sed字符/字符串交 ...

  4. SpringBoot整合SpringSecurityOauth2实现鉴权-动态权限

    写在前面 思考:为什么需要鉴权呢? 系统开发好上线后,API接口会暴露在互联网上会存在一定的安全风险,例如:爬虫.恶意访问等.因此,我们需要对非开放API接口进行用户鉴权,鉴权通过之后再允许调用. 准 ...

  5. BUUCTF-被劫持的礼物

    被劫持的礼物 看提示用wireshark打开,找登陆流量包,过滤http .login目录的 账号密码加一起MD5小写即可. 1d240aafe21a86afc11f38a45b541a49

  6. NC15052 求最值

    NC15052 求最值 题目 题目描述 给你一个长为 \(n\) 的序列 \(a\) 定义 \(f(i,j)=(i-j)^2+g(i,j)^2\) \(g\) 是这样的一个函数 求最小的 \(f(i, ...

  7. C语言指针-小结

    1) 指针变量可以进行加减运算,但是指针变量的加减运算并不是加上或减去一个数,而是跟指针指向的数据类型有关,数据类型在系统中占了多少个字节,指针+1后就向后移动了多少个字节. 2) int *poin ...

  8. java--运算符和表达式

    运算符:就是对常量或者遍历进行操作的符号: 表达式:用运算符把常量或者变量连接起来符合java语法的式子称为表达式,不同运算符连接的表达式体现的是不同类型的表达式. 一.算术运算符 1.使用%运算符: ...

  9. 5-21 拦截器 Interceptor

    Spring MVC拦截器 什么是拦截器 拦截器是SpringMvc框架提供的功能 它可以在控制器方法运行之前或运行之后(还有其它特殊时机)对请求进行处理或加工的特定接口 常见面试题:过滤器和拦截器的 ...

  10. 丽泽普及2022交流赛day21 社论

    A 暴力 . greater<double> -> greater<int> \(100\) -> \(50\) 代码丢了 . B dp . 考场上代码抢救一下就过 ...