Prometheus监控案例-tomcat、mysql、redis、haproxy、nginx

news2024/9/22 11:42:11

监控tomcat

tomcat自身并不能提供监控指标数据,需要借助第三方exporter实现:https://github.com/nlighten/tomcat_exporter

构建镜像

基于tomcat官方镜像,重新制作一个镜像,将tomcat-exporter和tomcat整合到一起。Ddockerfile如下:

FROM tomcat:8.5.73
LABEL maintainer="admin@163.com"

ADD server.xml /usr/local/tomcat/conf/

RUN mkdir -p /data/tomcat/webapps


ADD myapp /data/tomcat/webapps/myapp

#添加tomcat-expoter相关文件
ADD metrics.war  /data/tomcat/webapps
ADD simpleclient-0.8.0.jar /usr/local/tomcat/lib/
ADD simpleclient_common-0.8.0.jar /usr/local/tomcat/lib/
ADD simpleclient_hotspot-0.8.0.jar /usr/local/tomcat/lib/
ADD simpleclient_servlet-0.8.0.jar /usr/local/tomcat/lib/
ADD tomcat_exporter_client-0.0.17.jar /usr/local/tomcat/lib/

EXPOSE 8080 8443

ADD run_tomcat.sh /usr/bin/

CMD ["/usr/bin/run_tomcat.sh"]

myapp/目录下是一个测试页面index.jsp

root@master-01:~/dockerfile/tomcat# cat myapp/index.jsp
tomcat myapp

tomcat配置文件server.xml中需要指定app路径,并且打开war包的自动解压和部署功能

root@master-01:~/dockerfile/tomcat# cat server.xml |grep /data/tomcat
      <Host name="localhost"  appBase="/data/tomcat/webapps"  unpackWARs="true" autoDeploy="true">

run_tomcat.sh是启动tomcat脚本

root@master-01:~/dockerfile/tomcat# cat run_tomcat.sh
#!/bin/bash
/usr/local/tomcat/bin/catalina.sh start

tail -f /etc/hosts

执行构建,上传到私有仓库

docker build -t harbor-server.linux.io/n70/tomcat-with-exporter:8.5.73 .
docker push harbor-server.linux.io/n70/tomcat-with-exporter:8.5.73

运行一个测试容器,验证metrics接口是否可以访问

docker run -d --name tomcat -p 8080:8080 harbor-server.linux.io/n70/tomcat-with-exporter:8.5.73

在这里插入图片描述

部署tomcat

以Deployment方式运行tomcat

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  namespace: default
spec:
  selector:
    matchLabels:
     app: tomcat
  replicas: 1
  template:
    metadata:
      labels:
        app: tomcat
      annotations:
        prometheus.io/scrape: 'true'
        prometheus.io/port: "8080"
    spec:
      containers:
      - name: tomcat
        image: harbor-server.linux.io/n70/tomcat-with-exporter:8.5.73
        imagePullPolicy: Always
        ports:
        - containerPort: 8080
        securityContext:
          privileged: true
---
kind: Service
apiVersion: v1
metadata:
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/port: '8080'
  name: tomcat-service
spec:
  selector:
    app: tomcat
  ports:
  - nodePort: 31080
    port: 80
    protocol: TCP
    targetPort: 8080
  type: NodePort

将此yaml文件创建到集群上,然后等待Pod就绪
在这里插入图片描述

配置Prometheus采集数据

如果是部署在集群内部的Prometheus,建议使用角色为pod或endpoints的基于API Server的服务发现来发现target并监控。具体job配置可以参考之前的文章《Prometheus服务发现》

如果是集群外的Prometheus,添加一个job,内容如下:

- job_name: tomcat-exporter
    static_configs:
    - targets: ["192.168.122.12:31080"]

配置修改完成后,重启Prometheus。然后通过Prometheus界面查看target状态
在这里插入图片描述

在Grafana上导入模板,查看监控数据。模板地址:https://github.com/nlighten/tomcat_exporter/blob/master/dashboard/example.json
在这里插入图片描述

监控mysql

Prometheus官方提供了mysql-expoter用于采集mysql指标数据,项目地址:https://github.com/prometheus/mysqld_exporter

部署mysql

直接以apt方式安装mysql

apt -y install mariadb-server
mysql

mysql授权

创建一个账户并授权,之后mysql-exporter会使用此账户来访问mysql查询相关信息

> CREATE USER 'mysql-exporter'@'localhost' IDENTIFIED BY 'Admin@123' WITH MAX_USER_CONNECTIONS 3;
> GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql-exporter'@'localhost';

mysql -u mysql-exporter -p -h localhost;	#验证权限

部署mysql-exporter

下载安装包

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar xf mysqld_exporter-0.14.0.linux-amd64.tar.gz
mv mysqld_exporter-0.14.0.linux-amd64/mysqld_exporter /usr/bin/
 mysqld_exporter -h #查看帮助信息

准备mysql-exporter配置文件

root@prometheus-node-02:~# mkdir /etc/mysqld-exporter
root@prometheus-node-02:~# cat /etc/mysqld-exporter/.my.cnf
[client]
#指定连接mysql的账户和密码
user = mysql-exporter
password = Admin@123

准备service文件

root@prometheus-node-02:~# cat /lib/systemd/system/mysql-exporter.service
[Unit]
Description=Prometheus Node Exporter
After=network.target

[Service]
ExecStart=/usr/bin/mysqld_exporter --config.my-cnf=/etc/mysql-exporter/.my.cnf --web.listen-address=192.168.122.23:9104

[Install]
WantedBy=multi-user.target

启动服务

systemctl daemon-reload
systemctl start mysql-exporter.service
systemctl status mysql-exporter.service
systemctl enable mysql-exporter.service

访问mysql-exporter指标接口测试
在这里插入图片描述

配置Prometheus采集数据

编辑Prometheus配置,添加一个job,内容如下:

  - job_name: mysql-exporter
    static_configs:
    - targets: ["192.168.122.23:9104"]

配置修改完成后,重启Prometheus。然后通过Prometheus界面查看target状态
在这里插入图片描述

Grafana导入模板,查看监控数据。模板地址:https://github.com/prometheus/mysqld_exporter/blob/main/mysqld-mixin/dashboards/mysql-overview.json
在这里插入图片描述

监控redis

redis-exporter项目地址:https://github.com/oliver006/redis_exporter

部署redis&redis-exporter

将redis和redis-exporter运行在同一个Pod中,然后以Deployment方式部署Pod

apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis-deploy
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
      annotations:
        prometheus.io/scrape: "true"
        pometheus.io/port: "9121"
    spec:
      containers:
      - name: redis
        image: redis
        ports:
        - containerPort: 6379
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
      - name: redis-exporter
        image: oliver006/redis_exporter
        ports:
        - containerPort: 9121
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
kind: Service
apiVersion: v1
metadata:
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/port: "9121"
  name: redis-exporter-service
spec:
  selector:
    app: redis
  ports:
  - nodePort: 31082
    name: prom
    port: 9121
    protocol: TCP
    targetPort: 9121
  type: NodePort

---
kind: Service
apiVersion: v1
metadata:
  name: redis-redis-service
spec:
  selector:
    app: redis
  ports:
  - nodePort: 31081
    name: redis
    port: 6379
    protocol: TCP
    targetPort: 6379
  type: NodePort

将yaml文件创建到集群上,等待Pod就绪
在这里插入图片描述

通过 任意节点:31082/metrics 访问redis-exporter指标接口测试
在这里插入图片描述

配置Prometheus采集数据

编辑Prometheus配置,添加job,内容如下:

  - job_name: redis-exporter
    static_configs:
    - targets: ["192.168.122.13:31082"]

配置修改完成后,重启Prometheus。然后通过Prometheus界面查看target状态
在这里插入图片描述

Grafana导入模板,查看监控数据。模板ID:14615
在这里插入图片描述

监控Haproxy

Prometheus官方提供了haproxy-exporter用于采集haproxy指标数据,项目地址:https://github.com/prometheus/haproxy_exporter

部署haproxy-exporter

下载安装包

wget https://github.com/prometheus/haproxy_exporter/releases/download/v0.15.0/haproxy_exporter-0.15.0.linux-amd64.tar.gz
tar xf haproxy_exporter-0.15.0.linux-amd64.tar.gz
mv haproxy_exporter-0.15.0.linux-amd64/haproxy_exporter /usr/bin/
haproxy_exporter -h		#查看帮助信息

haproxy-exporter可以通过两种方式连接haproxy来获取数据:

  1. 通过socket文件连接haproxy获取数据,这种方式只能获取本机的haproxy数据
  2. 通过haproxy状态页连接haproxy获取数据,这种方式可以获取本机或远程主机的数据,但需要在haproxy配置文件中开启状态页面配置

启动hapeoxy-exporter

#如果通过haproxy状态页获取数据,运行下面命令,其中haadmin:123456表示访问状态页的用户名密码
haproxy_exporter --haproxy.scrape-uri="http://haadmin:123456@127.0.0.1:9999/haproxy-status;csv" &

#如果通过socket文件获取数据,运行下面命令
haproxy_exporter --haproxy.scrape-uri="unix:/run/haproxy/admin.sock" &

访问haproxy-exporter指标接口验证,默认端口9101
在这里插入图片描述

配置Prometheus采集数据

编辑Prometheus配置添加job,内容如下:

  - job_name: haproxy-exporter
    static_configs:
      - targets: ["192.168.122.14:9101", "192.168.122.15:9101"]

配置修改完成后,重启Prometheus。然后通过Prometheus界面查看target状态

在这里插入图片描述

Grafana导入模板,查看监控数据。模板ID: 2428
在这里插入图片描述

监控nginx

nginx-exporter项目地址:https://github.com/hnlq715/nginx-vts-exporter

此nginx-exporter依赖一个nginx模块nginx-module-vts(https://github.com/vozlt/nginx-module-vts),所以需要编译安装nginx,并加载此模块。

nginx-module-vts模块会收集nginx指标数据,然后提供一个状态页面,nginx-exporter通过此状态页获取指标数据,再将数据转换为Prometheus需要的数据格式提供给Prometheus。

部署nginx

下载nginx源码包和nginx-module-vts模块

wget http://nginx.org/download/nginx-1.22.1.tar.gz
wget https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2.1.tar.gz
tar xf nginx-module-vts-0.2.1.tar.gz -C /usr/local/src/
tar xvf nginx-1.22.1.tar.gz
cd nginx-1.22.1/

./configure --prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre \
--with-file-aio \
--with-stream \
--with-stream_ssl_module \
--with-stream_realip_module \
--add-module=/usr/local/src/nginx-module-vts-0.2.1/

修改nginx配置文件

http {
    vhost_traffic_status_zone;	#启用状态页

    ...

    server {

        ...

        location /status {	#状态页面location配置
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

启动nginx

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx

访问状态页测试
在这里插入图片描述
还可以用json格式输出数据

在这里插入图片描述

部署nginx-exporter

wget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
tar xf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
cp nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter /usr/bin/
nginx-vts-exporter  -nginx.scrape_uri http://192.168.122.23/status/format/json &	#启动nginx-exporter

访问nginx-exporter指标接口测试
在这里插入图片描述

配置Prometheus采集数据

编辑Prometheus配置,添加Job,内容如下:

  - job_name: nginx-exporter
    static_configs:
      - targets: ["192.168.122.23:9913"]

配置修改完成后,重启Prometheus。然后通过Prometheus界面查看target状态

在这里插入图片描述

Grafana导入模板,查看数据。模板地址:https://github.com/hnlq715/nginx-vts-exporter/blob/master/dashboard/nginx-vts-exporter.json

在这里插入图片描述

监控ingress-nginx-controller

ingress-nginx-controller程序自身可以提供指标数据,默认通过端口10254/metrics提供指标数据,在部署ingress-nginx-controller时候需要在容器上定义10254端口,并在ingress-nginx-controller对应的Service资源上也定义10254端口

        ports:
        - containerPort: 80
          name: http
          protocol: TCP
        - containerPort: 443
          name: https
          protocol: TCP
        - containerPort: 8443
          name: webhook
          protocol: TCP
        - name: metrics
          containerPort: 10254
          protocol: TCP
apiVersion: v1
kind: Service
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
    app.kubernetes.io/version: 1.3.1
  name: ingress-nginx-controller
  namespace: ingress-nginx
spec:
  ipFamilies:
  - IPv4
  ipFamilyPolicy: SingleStack
  ports:
  - appProtocol: http
    name: http
    port: 80
    protocol: TCP
    targetPort: http
  - appProtocol: https
    name: https
    port: 443
    protocol: TCP
    targetPort: https
  - name: metrics
    port: 10254
    targetPort: 10254
    protocol: TCP
  selector:
    app.kubernetes.io/component: controller
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/name: ingress-nginx
  type: NodePort

之后就可以通过nodePort访问ingress-nginx-controller的指标接口
在这里插入图片描述

然后在Prometheus中配置中添加Job,内容如下

  - job_name: nginx-ingress-controller
    static_configs:
      - targets: ["192.168.122.11:38144"]

配置修改完成后,重启Prometheus。通过Prometheus界面查看target状态
在这里插入图片描述

Grafana导入模板,查看监控数据。模板ID:9614
在这里插入图片描述

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

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

相关文章

【安全知识】——如何绕过cdn获取真实ip

作者名&#xff1a;白昼安全主页面链接&#xff1a; 主页传送门创作初心&#xff1a; 以后赚大钱座右铭&#xff1a; 不要让时代的悲哀成为你的悲哀专研方向&#xff1a; web安全&#xff0c;后渗透技术每日鸡汤&#xff1a; 现在的样子是你想要的吗&#xff1f;cdn简单来说就是…

商标侵权行为的种类有哪些

商标侵权行为的种类有哪些 1、商标侵权行为的种类有以下七种&#xff1a; (1)未经商标注册人的许可&#xff0c;在同一种商品上使用与其注册商标相同的商标的; (2)未经商标注册人的许可&#xff0c;在同一种商品上使用与其注册商标近似的商标&#xff0c;或者在类似商品上使…

Python3 面向对象实例及演示

Python从设计之初就已经是一门面向对象的语言&#xff0c;正因为如此&#xff0c;在Python中创建1个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。 如果以前没有接触过面向对象的编程语言&#xff0c;那可能需要先了解一些面向对象语言的一些基本特征&…

SPI+DMA传输性能比较

本文章仅仅简单记录32单片机的SPIDMA驱动显示屏的性能测试&#xff0c;这里不花费时间介绍SPI和DMA。 硬件材料&#xff1a;SPI显示屏一个&#xff0c;32单片机 软件材料&#xff1a; 1.LCD的SPI驱动显示程序&#xff08;SPI / SPIDMA&#xff09;&#xff1a; &#xff08;1&a…

葡萄酒(WINE)数据集分类(PyTorch实现)

一、数据集介绍 Data Set Information: These data are the results of a chemical analysis of wines grown in the same region in Italy but derived from three different cultivars. The analysis determined the quantities of 13 constituents found in each of …

QML debugging is enabled. Only use this in a safe environment.

系列文章目录 文章目录系列文章目录前言一、Qt Quick是什么1.QML核心二、使用步骤1.main.cpp3.运行结果前言 因为有个需求&#xff1a;C和web交互&#xff0c;初步想到在Qt中使用QWebChannel 今天第一次使用Qt Qml&#xff0c;建了qt Quick工程 一、Qt Quick是什么 QML&…

代码随想录算法训练营第三十五天 | 435. 无重叠区间,763.划分字母区间,56. 合并区间

一、参考资料无重叠区间 https://programmercarl.com/0435.%E6%97%A0%E9%87%8D%E5%8F%A0%E5%8C%BA%E9%97%B4.html 划分字母区间https://programmercarl.com/0763.%E5%88%92%E5%88%86%E5%AD%97%E6%AF%8D%E5%8C%BA%E9%97%B4.html 合并区间https://programmercarl.com/0056.%E5%90…

分享111个HTML艺术时尚模板,总有一款适合您

分享111个HTML艺术时尚模板&#xff0c;总有一款适合您 111个HTML艺术时尚模板下载链接&#xff1a;https://pan.baidu.com/s/1sYo2IPma4rzeku3yCG7jGw?pwdk8dx 提取码&#xff1a;k8dx Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 时尚理发沙龙服务网站模…

实现8086虚拟机(二)——模拟CPU和内存

文章目录CPU 架构EU&#xff08;执行单元&#xff09;BIU&#xff08;总线接口单元&#xff09;小结一下模拟内存模拟 BIU模拟 EU模拟 CPU总结要模拟 8086 CPU 运行&#xff0c;必须知道 CPU 的一些知识。下文的知识点都来自《Intel_8086_Family_Users_Manual 》。CPU 架构 微…

spring之Spring AOP基于注解

文章目录前言一、Spring AOP基于注解的所有通知类型1、前置通知2、后置通知3、环绕通知4、最终通知5、异常通知二、Spring AOP基于注解之切面顺序三、Spring AOP基于注解之通用切点三、Spring AOP基于注解之连接点四、Spring AOP基于注解之全注解开发前言 通知类型包括&#x…

J4、哨兵集群、redis切片还是加实例

哨兵集群 单节点的哨兵还是可能会发生故障&#xff0c;需要部署集群。 部署哨兵时&#xff0c;只需要下面的命令&#xff0c;那哨兵是如果互相发现的&#xff1f; sentinel monitor <master-name> <ip> <redis-port> <quorum> 基于 pub/sub 机制的哨…

Premiere基础操作

一&#xff1a;设置缓存二&#xff1a;ctrI导入素材三&#xff1a;导入图像序列四&#xff1a;打开吸附。打开吸附后素材会对齐。五&#xff1a;按~键可以全屏窗口。六&#xff1a;向前选择轨道工具。在时间线上点击&#xff0c;向前选中时间线上素材。向后选择轨道工具&#x…

19_微信小程序之优雅实现侧滑菜单

19_微信小程序之优雅实现侧滑菜单一.先上效果图 要实现这样一个效果&#xff0c;布局其实很简单&#xff0c;整体布局是一个横向滚动的scroll-view&#xff0c;难点在于怎么控制侧滑菜单的回弹&#xff0c;以及寻找回弹的边界条件? 此篇文章主要是基于uni-app来实现的&#xf…

MySQL 记录锁+间隙锁可以防止删除操作而导致的幻读吗?

文章目录什么是幻读&#xff1f;实验验证加锁分析总结什么是幻读&#xff1f; 首先来看看 MySQL 文档是怎么定义幻读&#xff08;Phantom Read&#xff09;的: The so-called phantom problem occurs within a transaction when the same query produces different sets of r…

使用Fairseq进行Bart预训练

文章目录前言环境流程介绍数据部分分词部分预处理部分训练部分遇到的问题问题1可能遇到的问题问题1问题2前言 本文是使用 fairseq 做 Bart 预训练任务的踩坑记录huggingface没有提供 Bart 预训练的代码 facebookresearch/fairseq: Facebook AI Research Sequence-to-Sequence…

字符串匹配 - 文本预处理:后缀树(Suffix Tree)

上述字符串匹配算法(朴素的字符串匹配算法, KMP 算法, Boyer-Moore算法)均是通过对模式&#xff08;Pattern&#xff09;字符串进行预处理的方式来加快搜索速度。对 Pattern 进行预处理的最优复杂度为 O(m)&#xff0c;其中 m 为 Pattern 字符串的长度。那么&#xff0c;有没有…

windows环境下,vue启动项目后打开chrome浏览器

前言&#xff1a;关于vue启动后打开chrome浏览器&#xff0c;我查了很多资料&#xff0c;方案如下&#xff1a; 1、增加环境变量BROWSER为chrome&#xff08;试了没效果&#xff09; 2、设置系统的默认浏览器为chrome&#xff08;应该可以&#xff0c;但没试&#xff1b;因为…

有序表的应用:[Leetcode 327] 区间和的个数

一、题目 1、题目描述 给你一个整数数组 nums 以及两个整数 lower 和 upper 。求数组中&#xff0c;值位于范围 [lower, upper] &#xff08;包含 lower 和 upper&#xff09;之内的 区间和的个数 。 区间和 S(i, j)表示在 nums 中&#xff0c;位置从 i 到 j 的元素之和&…

基于jsplumb构建的流程设计器

项目背景 最近在准备开发工作流引擎相关模块&#xff0c;完成表结构设计后开始着手流程设计器的技术选型&#xff0c;调研了众多开源项目后决定基于jsplumb.js开源库进行自研开发&#xff0c;保证定制化的便捷性&#xff0c;相关效果图及项目地址如下 项目地址&#xff1a;ht…

进程切换-

实验课之前有一些问题 中断机制 第一个问题&#xff1a; interrupt的两个状态源头&#xff1a; 外中断多由随机中断&#xff08;异步中断&#xff09;造成&#xff0c;如鼠标点击&#xff0c;键盘输入&#xff1b; 内终端多由故障终端&#xff1a;程序运行异常&#xff0c;硬件…