Prometheus+Grafana监控一网打尽

news2024/11/25 22:54:29

Prometheus+Grafana监控

  • 一、Prometheus介绍
  • 二、监控组件
    • node-exporter
    • mysqld-exporter
    • cadvisor
    • prometheus
  • 三、Grafana 展示平台
    • docker启动
    • 配置Data sources
    • 导入Dashboard模板
      • Linux主机监控
      • Mysql监控
      • Nginx监控
      • Redis监控
      • PostgreSQL监控
      • Kafka监控
      • ElasticSearch监控

一、Prometheus介绍

Prometheus(普罗米修斯)是一套开源的监控报警时间序列数据库的组合。

Prometheus基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境比如VM或者Docker。

Prometheus应该是为数不多的适合Docker、Mesos、Kubernetes环境的监控系统之一。

输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus。

与其他监控系统相比,Prometheus的主要特点是:

  • 一个多维数据模型(时间序列由指标名称定义和设置键/值尺寸)。

  • 非常高效的存储,平均一个采样数据占~3.5bytes左右,320万的时间序列,每30秒采样,保持60天,消耗磁盘大概228G。

  • 一种灵活的查询语言。

  • 不依赖分布式存储,单个服务器节点。

  • 时间集合通过HTTP上的PULL模型进行。

  • 通过中间网关支持推送时间。

  • 通过服务发现或静态配置发现目标。

  • 多种模式的图形和仪表板支持。

二、监控组件

下面介绍如何使用Prometheus、Grafana、CAdvisor、node-exporter、mysqld-exporter对本机服务器性能、Docker容器、MySQL数据库进行监控。

  • node-exporter 用于机器系统数据收集

  • mysqld-exporter 用于MySQL数据库数据收集

  • redis-exporter 用于Redis缓存数据库的数据收集

  • cadvisor 用于收集宿主机上的docker容器数据

  • prometheus 用于周期性抓取被监控组件的状态

  • Grafana是一个开源的功能丰富的数据可视化平台,通常用于时序数据的可视化

node-exporter

监控服务器CPU、内存、磁盘、I/O等信息,首先需要安装node exporter。node exporter的作用是用于机器系统数据收集。

由于node-exporter要获取主机的信息,最好直接部署到宿主机上。

Docker部署

docker run -d --name node-exporter --restart=always -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" prom/node-exporter

浏览器访问: http://ip:9100/metrics,收集到数据,有了它就可以做宿主机Linux数据展示了

mysqld-exporter

用来收集MysQL或者Mariadb数据库相关指标的,mysql exporter需要连接到数据库并有相关权限。

Docker部署

docker run -d --name mysqld_exporter --restart=always -p 9104:9104 -e DATA_SOURCE_NAME="root:123456@(localhost:3306)/" prom/mysqld-exporter

浏览器访问: http://ip:9104/metrics,收集到数据,有了它就可以做MySQL数据库数据展示了

cadvisor

cadvisor可以对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况。

Docker部署

docker run -d -p 8080:8080 --name cadvisor \
-v /:/rootfs:ro \
-v /var/run:/var/run:rw \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
-v /dev/disk/:/dev/disk:ro --restart=always --privileged=true google/cadvisor

浏览器访问: http://ip:8080/metrics,收集到数据,有了它就可以做Docker容器数据展示了。

如果获取不到CPU的信息,可通过下方命令,进行挂载和建立软连接

sudo mount -o remount,rw '/sys/fs/cgroup'
sudo ln -s /sys/fs/cgroup/cpu,cpuacct /sys/fs/cgroup/cpuacct,cpu

prometheus

Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。

docker

docker run -d -p 9090:9090 --name prometheus \
-v /mnt/e/Docker/volumes/prometheus/:/prometheus \
-v /mnt/e/Docker/volumes/prometheus/data:/data \
-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
--restart=always prom/prometheus

注意:

宿主机的路径必须是绝对路径: /opt/prometheus/prometheus.yml,否则报错

prometheus.yml

global:
# 抓取间隔,60秒向目标抓取一次数据
  scrape_interval: 60s
  evaluation_interval: 60s

# 这里表示抓取对象的配置
scrape_configs:
  - job_name: 'prometheus'
  # 重写了全局抓取间隔时间,由60秒重写成30秒
    scrape_interval: 30s
    static_configs:
      - targets: ['172.23.200.252:9090']
  - job_name: 'mysqld'
    static_configs:
      - targets: ['172.23.200.252:9104']
  - job_name: 'linux'
    static_configs:
      - targets: ['172.23.200.252:9100']
  - job_name: 'docker'
    static_configs:
      - targets: ['172.23.200.252:8080']

浏览器访问: http://部署的机器IP地址:9090/graph ,效果如下
在这里插入图片描述

访问targets,http://部署的机器IP地址:9090/targets,效果如下。
在这里插入图片描述

三、Grafana 展示平台

Grafana是用于可视化大型测量数据的开源程序,他提供了强大和优雅的方式去创建、共享、浏览数据。Dashboard中显示了不同metric数据源中的数据。
Grafana是一个开源的,拥有丰富Dashboard和图表编辑的指标分析平台,和Kibana不同的是Grafana专注于时序类图表分析,而目支持多种数据源,如Graphite、 InfluxDB、Elasticsearch、Mysql、K8s、Zabbix、 Prometheus等。

docker启动

新建空文件夹grafana-storage,用来存储数据

mkdir /opt/grafana-storage

添加权限,因为grafana用户会在这个目录写入文件,直接设置777,也可以设置其它权限

chmod 777 -R /opt/grafana-storage

Docker部署

docker run -d --name grafana --restart=always -p 3000:3000 -v /opt/grafana-storage:/var/lib/grafana grafana/grafana

访问URL

http://部署机器的IP地址:3000
默认会先跳转到登录页面,默认的用户名和密码都是admin
登录之后,它会要求你重置密码。你还可以再输次admin密码!

密码设置完成之后,就会跳转到首页。

配置Data sources

点击Setting -> Data sources -> Add data source
在这里插入图片描述

选择Prometheus

name名字写Prometheus
ype 选择Prometheus,因为数据都从它那里获取
url 输入Prometheus的ip和端口

在这里插入图片描述

点击下面的Save & Test,如果出现绿色提示信息,说明可以了。

导入Dashboard模板

回到首页,Dashboard -> import 导入grafana监控模板,模板导入有三种方式:
在这里插入图片描述

  • Upload JSON file 方式 导入json文件
  • import via grafana.com 导入Url或id
  • import via pannel json 导入json代码

官网下载Dashboard地址:https://grafana.com/grafana/dashboards

在这里插入图片描述

Linux主机监控

导入主机的监控模板,模板id为: 12633,填入import via grafana.com输入框内,点击【load】进入选项配置界面

![[Pasted image 20221212134701.png]]

选择Prometheus组件,点击【Import】保存就可以进行数据可视化展示

在这里插入图片描述

Mysql监控

导入Mysql模板,模板id为: 7362

![[Pasted image 20221212174306.png]]

Nginx监控

prometheus 监控 nginx 使用 nginx-vts-exporter 采集数据。同时,需要 nginx 支持 nginx-module-vts 模块获取 nginx 自身的一些数据。

nginx-vts

nginx,默认是没有nginx-module-vts模块的。需要下载对应的nginx源码,进行重新编译才行。为了快速演示,这里使用nginx-vts镜像,包含nginx和nginx-module-vts模块

docker run -d -it --name nginx -p 80:80 gaciaga/nginx-vts

此镜像已经默认开启了status,访问http://10.1.7.33/status

![[Pasted image 20221213151757.png]]

nginx-vts-exporter

主要用于收集nginx的监控数据,并给Prometheus提供监控接口,默认端口号9913。

docker run -d -it --name nginx-vts-exporter -e NGINX_STATUS="http://10.1.7.33/status/format/json" -p 9913:9913 sophos/nginx-vts-exporter

注意:请根据实际情况修改NGINX_STATUS变量,确保能正常访问。

浏览器访问: http://ip:9913/metrics,收集到数据,有了它就可以做Nginx数据展示了

修改prometheus.yml配置,增加nginx统计配置

- job_name: 'nginx'
    static_configs:
      - targets: ['10.1.7.33:9913']

重启prometheus

docker restart prometheus

导入Nginx模板,模板id为: 2949

在这里插入图片描述

Redis监控

prometheus监控redis需要用到redis_exporter。

启动redis_exporter

docker run -d --name redis_exporter -p 9121:9121 oliver006/redis_exporter --redis.addr redis://10.1.7.33:6379 --redis.password '你的密码'

参数说明:

--redis.addr:指明一个或多个 Redis 节点的地址,多个节点使用逗号分隔,默认为redis://localhost:6379
--redis.password:验证 Redis 时使用的密码;
--redis.file:包含一个或多个redis 节点的文件路径,每行一个节点,此选项与 --redis.addr 互斥。
--web.listen-address:监听的地址和端口,默认为 0.0.0.0:9121

修改prometheus.yml配置,增加redis统计配置

- job_name: 'redis'
    static_configs:
      - targets: ['10.1.7.33:9121']

重启prometheus

docker restart prometheus

导入Redis模板,模板id为: 11835

![[Pasted image 20221213113052.png]]

PostgreSQL监控

prometheus监控PostgreSQL需要用到postgres-exporter

docker启动

docker run -p 9187:9187 -d --name postgresqldb-exporter -e DATA_SOURCE_NAME="postgresql://swap:swap@piesat@10.1.100.167:5432/zxj_sdp_db?sslmode=disable"  quay.io/prometheuscommunity/postgres-exporter

浏览器访问: http://ip:9187/metrics,收集到数据,有了它就可以做PostgreSQL数据展示了

修改prometheus.yml配置,增加postgres统计配置

- job_name: 'postgres'
    static_configs:
      - targets: ['172.23.200.252:9187']

重启prometheus

docker restart prometheus

压缩包启动

注意:docker直接启动有一个问题,无法监测到postgresql服务的启动时间。若要监测服务启动时间,需要添加自定义监测指标:

1.下载postgres_exporter插件

2.上传服务器并进行解压

tar -xzvf postgres_exporter-0.11.0.linux-amd64.tar.gz

3.添加环境变量

vim ~/.bash_profile
# 在文件最后加上新的路径
export DATA_SOURCE_NAME="postgresql://<你的用户>:<你的密码>@<数据库ip>:5432/zxj_sdp_db?sslmode=disable"

# 手动生效
source ~/.bash_profile

4.指定一个包含自定义查询语句的 YAML 文件,参考 queries.yaml

pg_postmaster:
  query: "SELECT pg_postmaster_start_time as start_time_seconds from pg_postmaster_start_time()"
  master: true
  metrics:
    - start_time_seconds:
        usage: "GAUGE"
        description: "Time at which postmaster started"

5.启动postgres_exporter

./postgres_exporter --web.listen-address :9187 --extend.query-path="/home/prometheus/postgresql/queries.yaml"

参数说明:

--web.listen-address:监听地址
--extend.query-path:指定一个包含自定义查询语句的 YAML 文件

导入PostgreSQ模板,模板id为: 9628

在这里插入图片描述

Kafka监控

docker安装kafka-exporter

docker run --name kafka-exporter -d -p 9308:9308 danielqsj/kafka-exporter --kafka.server=10.1.7.33:9092 --zookeeper.server=10.1.7.33:2181

浏览器访问: http://ip:9308/metrics,收集到数据,有了它就可以做kafka数据展示了

修改prometheus.yml配置,增加kafka统计配置

- job_name: 'kafka'
    static_configs:
      - targets: ['10.1.7.33:9308']

重启prometheus

docker restart prometheus

导入Kafka模板,模板id为: 7589

在这里插入图片描述

ElasticSearch监控

docker-compose启动elasticsearch-exporter

docker-compose.yml

version: "3.9"
services:
  elasticsearch_exporter: 
    container_name: 'es_exporter' 
    image: prometheuscommunity/elasticsearch-exporter 
    command: 
      - '--es.uri=http://10.1.7.33:9200' 
       # 如果使用了身份验证 http://username:password@elasticsearch_address:9200
      - '--es.all' 
    restart: always 
    ports: 
      - "9114:9114"

参数说明:

--es.uri     默认http://localhost:9200,连接到的Elasticsearch节点的地址(主机和端口)。 这可以是本地节点(例如localhost:9200),也可以是远程Elasticsearch服务器的地址 
--es.all 默认flase,如果为true,则查询群集中所有节点的统计信息,而不仅仅是查询我们连接到的节点。 
--es.cluster_settings 默认flase,如果为true,请在统计信息中查询集群设置 
--es.indices 默认flase,如果为true,则查询统计信息以获取集群中的所有索引。 
--es.indices_settings 默认flase,如果为true,则查询集群中所有索引的设置统计信息。 
--es.shards 默认flase,如果为true,则查询集群中所有索引的统计信息,包括分片级统计信息(意味着es.indices = true)。 
--es.snapshots 默认flase,如果为true,则查询集群快照的统计信息。

启动elasticsearch_exporter

docker-compose up -d

浏览器访问: http://ip:9114/metrics,收集到数据,有了它就可以做es数据展示了

修改prometheus.yml配置,增加elasticsearch统计配置

- job_name: 'elasticsearch'
    static_configs:
      - targets: ['10.1.7.33:9114']

重启prometheus

docker restart prometheus

导入elasticsearch模板,模板id为: 2322

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这四类项目经理一定带不好项目

项目经理就一定可以带好项目嘛&#xff1f;&#xff0c;当然不一定 失败的项目不少&#xff0c;除去一些本身就很坑的项目&#xff0c;大多项目失败&#xff0c;都和项目经理的个性有关。 也总结了2组极端特质&#xff1a; 第一&#xff0c;烂好人VS劳模型 第二&#xff0c;马…

[ vulhub漏洞复现篇 ] struts2远程代码执行漏洞s2-059(CVE-2019-0230)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

JavaEE-多线程初阶3

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;JavaEE &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 目录volatile关键字wait 和 notify多线程案例单例模式饿汉模式懒汉模式volatile关键字 volatile : 易变的&#xff0c;易失的 vo…

关于实体类中VO、DTO、Entity的区别

关于实体类中VO、DTO、Entity的区别 1、entity 里的每一个字段&#xff0c;与数据库相对应&#xff0c; 2、vo 里的每一个字段&#xff0c;是和你前台 html 页面相对应&#xff0c; 3、dto 这是用来转换从 entity 到 vo&#xff0c;或者从 vo 到 entity 的中间的东西 。(DTO中拥…

leetcode: 1091. 二进制矩阵中的最短路径

1091. 二进制矩阵中的最短路径 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/shortest-path-in-binary-matrix/description/ 给你一个 n x n 的二进制矩阵 grid 中,返回矩阵中最短 畅通路径 的长度。如果不存在这样的路径,返回 -1 。 二进制矩阵中的 畅通…

刚刚接触编程,纠结应该先学Python还是Java?看完心里就有数了。

准备学习编程前&#xff0c;你一定会打开电脑搜索一下“先学Python还是先学Java&#xff1f;”扑面而来的是海量回答。 如果你问一名Java程序员&#xff0c;肯定会建议你先学Java&#xff0c;因为他们认为Python像个乳臭未干的黄毛小子。但如果你问Python程序员&#xff0c;可…

MacOS Ventura 13.1 (22C65) 正式版带 OC 0.8.7 and winPE 双分区原版黑苹果镜像

12 月 14 日&#xff0c;苹果向 Mac 电脑用户推送了 macOS 13.1 更新&#xff08;内部版本号&#xff1a;22C65&#xff09;&#xff0c;本次更新距离上次发布隔了 34 天。本次更新引入了无边记应用&#xff0c;旨在让用户在空白的白板式画布上进行素描、绘画和写作&#xff0c…

[附源码]Nodejs计算机毕业设计基于Web的在线音乐网站Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分…

能力评估网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; (1)高校学生评估系统用户页面设计 前台页面主要是为用户设计&#xff0c;经过对用户和评估系统分析&#xff0c;目前主要…

足球视频位置与平面坐标的转换

依赖&#xff1a; C# OpenCVSharp WPF Numpy 目的&#xff1a;解决足球场上&#xff0c;人物投影到二维平面的位置坐标 图A / B/ C 一、基础概念 1.1标准球场的定义&#xff1a; 参考&#xff1a;https://zh.m.wikipedia.org/zh/%E8%B6%B3%E7%90%83%E5%A0%B4图 D 1.2 配准…

m软件接收机中同步技术以及LMS-RLS自适应均衡技术的matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 自适应均衡属于自适应信号处理的应用范畴&#xff0c;各种各样的自适应均衡算法如迫零(ZF)算法、最小均方(LMS)算法、递归最小二乘(RLS)算法、变换域均衡算法、Bussgang算法、高阶或循环统计量算…

使用CreateJS实现一个【拯救球员】小游戏,快@你的小伙伴一起来玩儿吧

拯救球员游戏需求&#x1f447;核心玩法&#x1f447;&#x1f447;界面原型&#x1f447;&#x1f447;成品演示&#x1f447;游戏开发1.游戏素材准备2.代码实现1.创建index.html页面2.首页转场动画实现3.添加分数倒计时4.卡片排序展示5.游戏结束世界杯开赛前夕&#xff0c;球…

拷贝构造,赋值运算符重载(六千字长文详解!)

c之类和对象详解 拷贝构造&#xff0c;赋值运算符重载 文章目录c之类和对象详解 拷贝构造&#xff0c;赋值运算符重载拷贝构造拷贝构造特征拷贝构造的注意赋值运算符重载运算符重载赋值重载赋值运算符的写法注意赋值重载的默认性赋值重载和拷贝赋值的区别在哪里&#xff1f;拷贝…

Ubuntu问题汇总

1.sudo ifconfig 找不到命令 ubuntu找不到ifconfig_猿 白的博客-CSDN博客_ubuntu ifconfig命令找不到 没有找到ifconfig的命令&#xff0c;需要进行安装&#xff0c;按照提示中的命令安装相关的工具包 sudo apt install net-tools 2.ip查找 3.重启服务器后&#xff0c;nvid…

记一次浏览器预览通过nginx且有权限控制的静态文件

我的需求是&#xff0c;后台生成了合同文件&#xff0c;用户需要进行预览&#xff0c;如果采用流的实现方式的话&#xff0c;会涉及到输入流、输出流&#xff0c;性能开销较大&#xff0c;所以采用的是直接访问文件&#xff0c;这里就涉及到一个问题&#xff0c;就是 需要设置…

Mobtech秒验SDK——一站式解决用户登录场景

据悉&#xff0c;北京中文万维科技有限公司旗下多款APP&#xff0c;和MobTech开发的秒验SDK达成合作&#xff0c;为其提供用户一键登录解决方案。 北京中文万维科技有限公司是一家立志以移动互联网阅读为发展起点的阅读互动娱乐高新技术企业&#xff0c;旗下拥有多款阅读类APP。…

互动教学场景下的视频直播线上研讨会应用(组图)

阿酷TONY / 原创 / 2022-12-14 / 长沙 / 互动教学/互动培训类场景特点&#xff1a; 1. 直播过程中&#xff0c;学员不仅是观看讲师的授课内容&#xff0c;还要与讲师直接进行音视频会话&#xff1b;当然一些非培训教学场景也常用到&#xff0c;比如线上学术类研讨会等等。 2…

【Pycharm教程】 详解 PyCharm Macros宏

宏提供了一种方便的方法来自动化您在编写代码时经常执行的重复过程。您可以录制、编辑和播放宏&#xff0c;为它们分配快捷方式并共享它们。 宏可用于在文件中组合一系列与编辑器相关的操作。 您无法记录按钮单击、导航到弹出窗口以及访问工具窗口、菜单和对话框。 可以使用没…

从3s到40ms,看看人家的性能优化技巧,确实优雅

什么是高性能系统 先理解一下什么是高性能设计&#xff0c;官方定义: 高可用(High Availability&#xff0c;HA)核心目标是保障业务的连续性&#xff0c;从用户视角来看&#xff0c;业务永远是正常稳定的对外提供服务&#xff0c;业界一般用几个 9 来衡量系统的可用性。通常采…

代码随想录算法训练营第五十天|123.买卖股票的最佳时机III、 188.买卖股票的最佳时机IV

123.买卖股票的最佳时机III 此题限定了买卖的次数&#xff0c;所以应该用几个状态来记录所对应得利润 至多买卖两次&#xff0c;这意味着可以买卖一次&#xff0c;可以买卖两次&#xff0c;也可以不买卖。 dp数组及下标含义 一天一共就有五个状态&#xff0c; 0 没有操作 1 第…