系统集成Prometheus+Grafana

根据产品需求在自己的系统中添加一个系统监控的页面,其中有主机信息的显示,也有一些业务信息的显示。调研后的方案是 主机信息通过Prometheus采集和存储,业务信息通过自己系统的调度任务统计后存储在Mysql中,使用Grafana对接Prometheus和Mysql数据源来制作图表,然后嵌入到自己系统的页面中进行展示。

重点解决问题:

1)Prometheus和NodeExporter的安全认证问题

2)Grafana的安全认证问题

1. 部署Prometheus

Prometheus分为服务端和客户端(xxxExporter),Prometheus采用服务端主动去客户端拉取数据的方式。本次需求为采集linux服务器主机信息,因此客户端使用NodeExporter。

1.1 部署NodeExporter

根据我们服务器的情况部署NodeExporter采用Docker和二进制包两种方式。

1.1.1 Docker部署

考虑到nodeExporter访问的安全,使用基础的安全认证方式。

1.1.1.1 配置安全认证

创建文件/opt/node_exporter/web-config.yml,内容:

# Usernames and passwords required to connect.
# Passwords are hashed with bcrypt: https://github.com/prometheus/exporter-toolkit/blob/master/docs/web-configuration.md#about-bcrypt.
basic_auth_users:
  {Username}: {Hashed password}

说明:

{Username}: {Hashed password}可以有多组,其中

{Username}是用户名

{Hashed password}经过hash加密后的密码,linux下可以使用以下命令对密码加密:

htpasswd -nBC 10 "" | tr -d ':\n'

示例:

basic_auth_users:
  exporter-user: $2y$10$7dZ80a5HdLu2cpxjQehXdewVOPqygLlwMbbZUtGpKVxFDz7d8je3o
1.1.1.2 启动容器
docker run -d \
  --name node-exporter \
  --restart=always \
  --net="host" \
  --pid="host" \
  -v "/:/host:ro,rslave" \
  -v "/opt/node_exporter/web-config.yml:/web-config.yml" \
  quay.io/prometheus/node-exporter:latest \
  --path.rootfs=/host --web.config.file=/web-config.yml --web.listen-address=:9100

说明:

--web.listen-address参数可以指定Exporter的端口号,默认为9100。

容器启动后可以通过docker ps或者访问http://主机IP:端口号 检查服务是否启动成功。

1.1.2 二进制包部署

1.1.2.1 下载文件

下载地址:Download | PrometheusAn open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.icon-default.png?t=N7T8https://prometheus.io/download/#node_exporter

将下载后文件解压到/opt目录下,并改名为node_exporter

tar -xzvf node_exporter-1.7.0.linux-amd64.tar.gz -C /opt
cd /opt
mv node_exporter-1.7.0.linux-amd64 node_exporter
1.1.2.2 配置安全认证

同1.1.1.1

1.1.2.3 启动服务
nohup /opt/node_exporter/node_exporter --web.listen-address=:9100 --web.config.file=/opt/node_exporter/web-config.yml >/dev/null 2>&1 &

说明:

--web.listen-address参数可以指定Exporter的端口号,默认为9100。

 访问http://主机IP:端口号 检查服务是否启动成功。

1.1.2.4 配置开机自启

编辑/etc/rc.local文件,新起一行,添加启动服务的命令,同1.1.2.3

1.2 部署Prometheus Server

本文使用docker-compose方式部署,其他方式类似。

1.2.1 配置安全认证

创建配置目录:mkdir -p /opt/prometheus/config

创建文件/opt/prometheus/config/web-config.yml

文件格式同1.1.1.1,但用户和密码用途是不一样的,这个是访问Prometheus数据源是需要的。

示例:

basic_auth_users:
  prometheus-user: $2y$10$A.vlBjkqhhI6BTrW2ubXK.rsoSW/gcHhCXNJJlmuRX.LC0k7dj48s

1.2.2 配置服务参数

创建文件/opt/prometheus/config/prometheus.yml

参考文档:Configuration | PrometheusAn open-source monitoring system with a dimensional data model, flexible query language, efficient time series database and modern alerting approach.icon-default.png?t=N7T8https://prometheus.io/docs/prometheus/latest/configuration/configuration/

示例:

global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.
 
  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab'
 
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  - job_name: 'node-monitor'
 
    basic_auth:
      username: 'exporter-user'
      password: 'password'
 
    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s
 
    static_configs:
      - targets: ['x.x.x.1:9100','x.x.x.2:9100']
        labels:
          group: 'test'

说明:

password为nodeExporter端配置的明文密码。

targets 字段为监控的服务器列表,其内容为安装了node exporter的主机ip及端口号,多个主机逗号分隔。

1.2.3 启动服务

创建数据目录:mkdir -p /opt/prometheus/data

编写docker-compose.yml文件,内容:

version: '3'
services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    restart: always
    user: '0'
    ports:
      - 9090:9090
    volumes:
      - /opt/prometheus/config:/etc/prometheus
      - /opt/prometheus/data:/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 --web.config.file=/etc/prometheus/web-config.yml

说明

如果端口冲突可以通过ports端口映射修改端口

启动容器

docker-compose up -d

2. 部署Grafana

本文使用docker-compose方式部署,其他方式类似。

2.1 启动服务

创建数据目录mkdir -p /opt/grafana/data

编写docker-compose.yml文件,如果与Prometheus在同一台机器部署可以共用一个docker-compose文件,内容:

version: '3'
services:
  grafana:
    image: grafana/grafana:8.5.27
    container_name: grafana
    restart: always
    user: '0'
    ports:
      - 3000:3000
    volumes:
      - /data/grafana/data:/var/lib/grafana
    environment:
      - GF_SECURITY_ALLOW_EMBEDDING=true
      - GF_SECURITY_ADMIN_USER=admin
      - GF_SECURITY_ADMIN_PASSWORD=123@test
      - GF_AUTH_PROXY_ENABLED=true
      - GF_SERVER_ROOT_URL=http://localhost:8080/grafana/
      - GF_USERS_DEFAULT_THEME=light
#      - GF_SERVER_ROUTER_LOGGING=true

说明:

可以通过环境变量覆盖grafana.ini中的配置,详细配置参考:Configuration | Grafana documentationConfiguration documentationicon-default.png?t=N7T8https://grafana.com/docs/grafana/v8.3/administration/configuration/

GF_SECURITY_ALLOW_EMBEDDING 开启允许嵌入页面

GF_SECURITY_ADMIN_USER 设置默认管理员账号

GF_SECURITY_ADMIN_PASSWORD 设置默认管理员密码

GF_AUTH_PROXY_ENABLED 开启代理认证,即在反向代理中进行用户认证

GF_SERVER_ROOT_URL 通过反向代理的访问地址

GF_USERS_DEFAULT_THEME 用户默认主题配置为亮色

GF_SERVER_ROUTER_LOGGING 是否开启路由日志,调试时使用,默认不开启

2.2 初始配置

使用默认管理员账号和密码登录Grafana http://主机IP:3000,

根据需要添加Prometheus数据源和Mysql数据源,注意Prometheus数据源要启用basic auth,

导入或者新建Dashboard,编辑好图表。

3. 系统集成Grafana

3.1 配置Grafana的反向代理和代理认证

本系统使用了SpringCloudGateway做微服务网关,在Gateway中添加路由配置,示例:

{
  "id": "grafana",
  "order": 11,
  "predicates": [{
    "name": "Path",
    "args": {
      "_genkey_0": "/grafana/**"
    }
  }],
  "filters": [{
    "name": "StripPrefix",
    "args": {
      "_genkey_0": 1
    }
  },{
    "name": "RemoveRequestHeader",
    "args": {
      "_genkey_0": "Origin"
    }
  },{
    "name": "AddRequestHeader",
    "args": {
      "_genkey_0": "X-WEBAUTH-USER",
      "_genkey_1": "system-user"
    }
  }],
  "uri": "http://x.x.x.x:3000"
}

说明:

predicates 通过路径判断是否需要代理的请求。

filters StripPrefix 请求转发给后端时去掉第一段路径,即请求转发给后端时路径没有/grafana,该参数可与Grafana的配置项server.serve_from_sub_path配合使用。

filters RemoveRequestHeader 删除请求头中的Origin属性,解决因源请求中Origin值和后端服务器不匹配问题,也可将其改写成后端服务器地址。

filters RemoveRequestHeader 请求头中添加一个属性X-WEBAUTH-USER,该名称要与Grafana中的配置匹配,其默认为X-WEBAUTH-USER,其值system-user为通过该代理访问Grafana所使用的用户,默认不存在Grafana会自动注册,详细可参考Grafana文档。

uri 为反向代理的后端服务地址,即Grafana服务的地址。

3.2 用户认证

原系统(a.com)登录后会将token写在cookie中,并且在Gateway网关中做了用户登录认证,现在Grafana使用反向代理,所有通过访问http://a.com/grafana/**的请求都会带上a.com域名所属的cookie,可以直接利用原来网关的认证逻辑进行用户认证。

如果原系统没有在网关中做用户登录认证,可以在后端服务中写一个代理程序,并做用户认证,可以参考:https://www.cnblogs.com/xiaoqi/p/grafana.html

3.3 前端嵌入Grafana组件

如果想将Dashboard中的某个图表嵌入到自己系统的页面中,可以在某Panel上的Share->Embed中获取到图表的url,注意使用代理的地址。

其他问题:

1. 在Grafana中自己创建或编辑后保存的Dashboard,保存为json文件,在其他环境中再导入使用时,会报数据源无法找到的问题。

解决办法,编辑导出的json文件,在其文件的头部加上数据源的变量定义,具体可参考:Grafana导入 json 文件的 dashboard 错误 Templating Failed to upgrade legacy queries Datasource xxx not found_failed to upgrade legacy queries datasource promet-CSDN博客文章浏览阅读6.3k次,点赞5次,收藏11次。从一套环境导出 dashboard 为 json 文件,在另一套环境中导入,如果出现了标题中报错, 怎么解决这个问题?文章给出了三种解决方案,按各自实际需要选择_failed to upgrade legacy queries datasource prometheus was not foundhttps://blog.csdn.net/shaochenshuo/article/details/128735528

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

xsslabs第五关

看一下源码 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> <script> window.alert function() { confirm("完成的不错&#xff01…

UWB定位系统源码

自主研发的一套UWB定位系统源码&#xff0c;技术架构&#xff1a;java spring boot vue mysql单体服务 硬件&#xff08;UWB定位基站、卡牌&#xff09; UWB定义&#xff1a; UWB(Ultra Wideband)是一种无载波通信技术&#xff0c;利用纳秒至微秒级的非正弦波窄脉冲传输数据。…

ssm703学生考勤管理系统的设计与实现

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一 、设计说明 1.1课题背…

[SUCTF 2019]EasyWeb --不会编程的崽

个人认为&#xff0c;这题还算有些东西。先来看源码 <?php function get_the_flag(){// webadmin will remove your upload file every 20 min!!!! $userdir "upload/tmp_".md5($_SERVER[REMOTE_ADDR]);if(!file_exists($userdir)){mkdir($userdir);}if(!empty…

网络协议栈和os的关系(网络协议栈和计算机体系结构图相结合),用户如何从网络获取数据+本质,简述网络通信的本质

目录 网络协议栈和os的关系 思考联系 实际 用户从网络获取数据的过程 本质 如何获取 -- 系统调用 图示 不同的os 网络通信的本质 两台主机通信流程 网络协议栈和os的关系 思考联系 网络协议栈涵盖了硬件和软件,而os正是管理软硬件资源的中枢 os是计算机体系结构的一…

Centos 7 用户密码忘记解决办法

Centos 7 修改用户密码 重置密码 1、开机进入GRUB界面&#xff0c;在引导程序菜单上进行选择开机后进入以下界面&#xff0c;然后按Esc或者E键编辑选项&#xff1a; 2.用上下箭头翻到最后&#xff0c;编辑修改两处&#xff1a;ro改为rw,在LANGen_US.UFT-8后面添加init/bin/sh…

CleanMyMac X4.16.4介绍及下载安装图文详细步骤教程

一、简介 近年来&#xff0c;随着电脑使用的广泛&#xff0c;我们也越来越依赖电脑来完成日常工作、学习和娱乐。然而&#xff0c;使用电脑长时间后&#xff0c;我们会发现电脑运行缓慢&#xff0c;存储空间不足等问题。这时候&#xff0c;清理电脑就变得非常必要。 CleanMyMac…

基于Python3的数据结构与算法 - 09 希尔排序

一、引入 希尔排序是一种分组插入排序的算法。 二、排序思路 首先取一个整数d1 n/2&#xff0c;将元素分为d1个组&#xff0c;每组相邻量取元素距离为d1&#xff0c;在各组内直接进行插入排序&#xff1b;取第二个整数d2 d1/2&#xff0c; 重复上述分组排序过程&#xff0…

本地快速部署谷歌开放模型Gemma教程(基于WasmEdge)

本地快速部署谷歌开放模型Gemma教程&#xff08;基于WasmEdge&#xff09; 一、介绍 Gemma二、部署 Gemma2.1 部署工具2.1 部署步骤 三、构建超轻量级 AI 代理四、总结 一、介绍 Gemma Gemma是一系列轻量级、最先进的开放式模型&#xff0c;采用与创建Gemini模型相同的研究和技…

用node或者vscode开启一个简单的本地server服务器,加载html网页

使用Live Server 想要加载本地html页面可以快速能让它在你本地浏览器中打开&#xff0c;可以有好多种方式&#xff0c;如果你有使用vscode&#xff0c;可以安装一个插件&#xff1a;Live Server&#xff0c;然后直接在vscode中直接右键就可以开启这个服务&#xff1a; 安装好之…

Redis持久化+Redis内存管理和优化+Redis三大缓存问题

Redis持久化Redis内存管理和优化Redis三大缓存问题一、Redis高可用二、Redis持久化1、RDB持久化1.1 触发条件(1) 手动触发(2) 自动触发(3) 其他自动触发机制 1.2 执行流程1.3 启动时加载 2、AOF持久化2.1 开启AOF2.2 执行流程(1) 命令追加(append)(2) 文件写入(write)和文件同步…

Tomcat部署及多实例

一、Tomcat简介 1、简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。 当在一台机器上配置好Apache 服务器&#xff0c…

ARK:《BIG IDEAS 2024》

Cathie Wood所带领的方舟投资&#xff08;ARK&#xff09;发布了年度重磅研究报告《BIG IDEAS 2024》&#xff0c;该报告指出人工智能、公共区块链、多组学测序、能源存储和机器人技术这五大板块的融合将带来全球经济活动的改变。 这五个创新平台正在融合并定义这个技术时代&am…

全部免费!抖音,牛逼了!

相比于百度文心、清华智谱和讯飞星火这些在国内有一定市场知名度的AI工具&#xff0c;字节跳动多少显得有点低调了。 国内的AI工具用了不少&#xff0c;但要是说哪家最有前景&#xff0c;那最看好的还是字节跳动。 倒不是说字节的云雀大模型比上面这几个更牛逼&#xff0c;而…

【计算机网络】TCP 如何实现可靠传输

TCP通过三次握手建立连接&#xff0c;四次挥手释放连接&#xff0c;确保连接建立和连接释放的可靠。 序列号、检验和、确认应答信号、重发机制、连接管理、窗口控制、流量控制、拥塞控制 标准回答 可靠传输就是通过TCP连接传送的数据是没有差错、不会丢失、不重复并且按序到达的…

77-组合(回溯算法)

题目 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] 示例 2&#xff1a; 输入&#xff1a;n …

【MySQL】复合查询(重点)-- 详解

一、基本查询练习回顾 1、查询工资高于 500 或岗位为 MANAGER 的雇员&#xff0c;同时还要满足他们的姓名首字母为大写的 J 2、按照部门号升序而雇员的工资降序排序 3、使用年薪进行降序排序 4、显示工资最高的员工的名字和工作岗位 5、显示工资高于平均工资的员工信息 6、显…

关于DisableIEToEdge插件闪退问题的解决方案

关于DisableIEToEdge插件闪退问题.今天终于测试找到最佳解决方案了&#xff01; 1.管理员权限运行Windows powershell. 2.执行一下两条命令修复系统环境 DISM.exe /Online /Cleanup-image /Restorehealth sfc /scannow 3.关闭Windows安全中心的所有安全选项。 4.管理员权限运行…

Docker 常用操作命令备忘

Docker 一旦设置好了环境&#xff0c;日常就只要使用简单命令就可以运行和停止。 于是&#xff0c;我每次用的时候&#xff0c;都想不起来一些关键性的命令到底怎么用&#xff0c;特此记录。 一、镜像管理 从公有仓库拉取镜像 &#xff08;对于使用苹果电脑 M1/M2/M3 芯片的 …

店匠科技颁布 Shoplazza Awards:品牌出海迎历史性机遇,赋能品牌腾飞

在全球化的今天&#xff0c;中国品牌在全球市场的地位日益显著&#xff0c;品牌意识的提升推动了企业出海战略的全新转型。以全球电商市场发展为例&#xff0c;根据 ecommerceBD 数据&#xff0c;2023 年全球零售电子商务销售额预计 6.3 万亿美元&#xff0c;到 2026 年&#x…