点赞
评论
收藏
分享
举报
如何通过grafana展示NGINX metrics数据
发表于2022-10-31 15:25

浏览 9.5k

前言

本文章的目的是让读者能够对prometheus、grafana 等开源工具有个比较直观的了解,并通过动手实践一步步搭建起对应的服务。本文通过grafana 展示云原生环境下的nginx-ingress 的metrics 数据为例子,让读者具备从数据暴露到数据抓取,再到前端页面可视化展示出来这样一种能力。本文按照知识介绍、服务部署、前端效果展示这样的脉络去带领大家一步步实现。

一、知识概述

1.1 Prometheus 概述

1.1.1 简介

Prometheus 是古希腊神话里泰坦族的一名神明,名字的意思是"先见之明",下图中是 Prometheus 被宙斯惩罚,饱受肝脏日食夜长之苦。

Prometheus 是一套开源的系统监控报警框架。它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 2012 年创建,作为社区开源项目进行开发,并于 2015 年正式发布。2016 年,Prometheus 正式加入 Cloud Native Computing Foundation,成为受欢迎度仅次于 Kubernetes 的项目。

Prometheus 是一个开源的服务监控系统和时序数据库,其提供了通用的数据模型和快捷数据采集、存储和查询接口。它的核心组件Prometheus server会定期从静态配置的监控目标或者基于服务发现自动配置的自标中进行拉取数据,当新拉取到的数据大于配置的内存缓存区时,数据就会持久化到存储设备当中。

每个被监控的主机都可以通过专用的exporter 程序提供输出监控数据的接口,它会在目标处收集监控数据,并暴露出一个HTTP接口供Prometheus server查询,Prometheus通过基于HTTP的pull的方式来周期性的采集数据。

任何被监控的目标都需要事先纳入到监控系统中才能进行时序数据采集、存储、告警和展示,监控目标可以通过配置信息以静态形式指定,也可以让Prometheus通过服务发现的机制进行动态管理。

Prometheus 能够直接把API Server作为服务发现系统使用,进而动态发现和监控集群中的所有可被监控的对象。

Prometheus 官网地址:https://prometheus.io

Prometheus github 地址:https://github.com/prometheus

1.1.2 架构图

图中主要组件及工作流程介绍:

  • push gateway:Prometheus server 的一个代理节点, 当一些节点没有提供HTTP endpoint 时,可将数据push 到代理节点,Prometheus 会去代理节点获取数据;
  • exporters:数据采集插件, 暴露一个http 服务的接口给Prometheus server 定时抓取;
  • alertmanager:报警插件;

1.2 Grafana概述

Grafana 是一款用GO 语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。他提供了强大和优雅的方式去创建、共享、浏览数据。dashboard中显示了你不同metric数据源中的数据,是一个拥有丰富dashboard和图表编辑的指标分析平台。

1.3 云原生nginx-ingress概述

在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,其几乎承载着集群内服务访问的所有流量。Ingress是Kubernetes中的一个资源对象,用来管理集群外部访问集群内部服务的方式。您可以通过Ingress资源来配置不同的转发规则,从而达到根据不同的规则设置访问集群内不同的Service所对应的后端Pod。

为了使得Nginx Ingress资源正常工作,集群中必须要有个Nginx Ingress Controller来解析Nginx Ingress的转发规则。Nginx Ingress Controller收到请求,匹配Nginx Ingress转发规则转发到后端Service所对应的Pod,由Pod处理请求。Kubernetes中Service、Nginx Ingress与Nginx Ingress Controller有着以下关系:

  • Service是后端真实服务的抽象,一个Service可以代表多个相同的后端服务。
  • Nginx Ingress是反向代理规则,用来规定HTTP/HTTPS请求应该被转发到哪个Service所对应的Pod上。例如根据请求中不同的Host和URL路径,让请求落到不同Service所对应的Pod上。
  • Nginx Ingress Controller是一个反向代理程序,负责解析Nginx Ingress的反向代理规则。如果Nginx Ingress有增删改的变动,Nginx Ingress Controller会及时更新自己相应的转发规则,当Nginx Ingress Controller收到请求后就会根据这些规则将请求转发到对应Service的Pod上。

具体原理深入介绍请学习 https://www.nginx.org.cn/article/detail/12415

二、部署nginx-ingress

2.1 安装

nginx-ingress-controller 安装较为复杂,具体安装请参考:

https://docs.nginx.com/nginx-ingress-controller/installation/installation-with-manifests/

2.2配置更新

Ingress controller启动的时候开启prometheus, 如下图所示,端口使用的是9113来暴露metrics 数据,启动后可通过 curl http://{ingressIP}:9113/metrics 可看到暴露的metrics数据。

三、部署Prometheus Server

3.1安装

从https://prometheus.io/download/ 下载prometheus 对应版本的server, 此处选的是linux版本。


将tar包解压,此处解压到/usr/local/prometheus

3.2 配置数据来源

配置抓取数据来源为上面暴露的9113端口

编辑/usr/local/prometheus/prometheus.yml, 配置targets为{ingressIP}:9113


3.3 启动

/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml &

此时已经在9090端口上启动了该服务

Prometheus 自带url也可访问到



四、部署Grafana

4.1 安装

按照下面地址下载grafana 安装包文件:

wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.2.0-1.x86_64.rpm

下载后进行安装:

yum install grafana-enterprise-9.2.0-1.x86_64.rpm

4.2 启动

执行如下命令启动grafana, 默认端口3000

systemctl enable --now grafana-server

启动后,可访问http://{机器IP}:3000/, 登录默认用户名密码为admin/admin



如果忘记密码可进行重置,如下命令是将admin 密码设置为123456

grafana-cli admin reset-admin-password 123456

4.3 配置grafana数据源

4.3.1 选择data source菜单,选择prometheus数据源


4.3.2 配置 url 以及起个Name 

此处叫Prometheus, url 地址即为上面安装的prometheus server地址,下面有sava & test 按钮,成功已否,会有提示



4.4 创建或导入数据源

如果有面板json文件,可直接进行导入,如果没有可选择创建dash board,此处已经准备好json文件,故直接导入,此处的json文件来源

https://github.com/nginxinc/kubernetes-ingress/blob/main/grafana/NGINXPlusICDashboard.json注意文件里的datasource 要保证跟创建的datasource name一致




五、效果展示

最后面板可看到如下效果:

总结

通过grafana展示nginx metrics数据这个例子的学习和动手实践,相信大家已经能够掌握从数据暴露、抓取、再到展示一整套流程,上述教程也只是帮助大家简单上手项目,更多知识需要大家去深入学习。

已修改于2023-03-09 02:15
本作品系原创
创作不易,留下一份鼓励
icodeU

暂无个人介绍

关注



写下您的评论
发表评论
全部评论(0)

按点赞数排序

按时间排序

关于作者
icodeU
这家伙很懒还未留下介绍~
2
文章
3
问答
1
粉丝
相关文章
介绍nginx网页配置工具QQ技术交流群1:1106758598QQ技术交流群2:560797506邮箱: cym1102@qq.com官网地址: http://www.nginxwebui.cn码云: https://gitee.com/cym1102/nginxWebUIgithub: https://github.com/cym1102/nginxWebUI功能特点nginxWebUI也可管理多个nginx服务器集群,随时一键切换到对应服务器上进行nginx配置,也可以一键将某台服务器配置同步到其他服务器,方便集群管理.部署此项目后,配置nginx再也不用上网各种搜索配置代码,再也不用手动申请和配置ssl证书,只需要在本项目中进行增删改查就可方便的配置和启动nginx。技术说明本项目是基于springBoot的web系统,数据库使用sqlite,因此服务器上不需要安装任何数据库项目启动时会释放一个.sqlite.db到系统用户文件夹中,注意进行备份本系统通过Let'sencrypt申请证书,使用acme.sh脚本
点赞 6
浏览 26.1k
  前三周学习了陶辉老师的“NGINX基础培训系列课程”,感觉受益良多,在这里想把一些知识点记录一下,和大家分享一下知识点,也方便日后的随手查看,温故知新。  首先,我们了解到了Nginx的版本,Nginx发布版本分为主线版本和稳定版本,区分两个版本也非常简单,主线版本版本号为单数,比如1.19,稳定版本为双数,比如1.18,今天我要说的是稳定版本,这个版本会尽量少的减少Nginx的bug问题,适用于生产环境,这里我不建议使用Nginx和其他软件一样在生产环境中落后一个或多个大版本使用,之前生产环境做过漏扫,发现我们编译自带的Nginx版本为:nginx/1.13.3(查询命令为nginx-V),结果出现了多个漏洞,四个高危和一个中危漏洞:        通过升级Nginx到稳定版最新版本后修复!  其次,是Nginx发行版本的选择,目前比较流行的有:nginx、nginxplus、Tengine、openresty、ope
点赞 1
浏览 19.3k
感谢您参加“NGINX从入门到精通进阶系列培训”!以下为培训的问答、课件和录像,希望您能通过此培训学有所得,祝学习进步!>问与答:- 基础篇+高级篇 - 应用篇+实战篇(New)>课件(PPT):基础篇:-NGINX概要、安装、配置:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-Setup.pdf-NGINX日志、运维:https://interact.f5.com/rs/653-SMC-783/images/cnfeb22-nginxcorecourse-maintenance.pdf高级篇:-NGINX变量、API:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-API.pdf-NGINXSSL、NJS:https://interact.f5.com/rs/653-SMC-783/images/CNFEB22-NginxCoreCourse-SSL.pdf
点赞 10
浏览 21.9k