JVM监控篇(三)- JVM监控方案之prometheus+k8s+influxdb

本文详细介绍了如何在Kubernetes(k8s)环境中使用Prometheus监控Java应用的JVM,包括安装配置MySQL、k8s集群、JMX sidecar容器、配置servicemonitor、设置远程存储为InfluxDB,以及通过Grafana展示监控数据的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1- 方案说明

  • 适用场景:Java程序直接运行在Linux机器上
  • 组件说明:

1)k8s集群,使用NodePort方式暴露48888端口用于JVM监控
2)JMX sidecar容器用于将jmx的相关配置共享给业务容器
3)配置好servicemonitor,prometheus根据配置的target自动发现并获取JVM信息
4)使用influxDB作为prometheus的remote storage,由于prometheus内部实现了influxDB的remote storage接口,所以不需要再配置类似prom2click的中间件。也可以说,prometheus的数据格式可以与influxDB兼容。
5)使用grafana作为监控数据的展示

在这里插入图片描述

2- 实验环境说明

1)k8s环境
2)influx安装在宿主机上,其他都安装在k8s集群中

实验环境描述:共2个节点。
节点1: 172.16.212.11,主机名 db,配置2C2G,安装influx,mysql, grafana
节点2:172.16.212.12, 主机名 k8s,配置4C8G,安装k8s集群,业务程序
此外,prometheus部署在k8s集群中

3 - 安装配置mysql(Java程序需要使用)

  • 安装配置mysql5.7
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
yum localinstall mysql57-community-release-el7-8.noarch.rpm -y
yum install mysql-community-server -y
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
#查看密码
cat /var/log/mysqld.log  | grep pass
2021-02-09T08:25:49.035598Z 1 [Note] A temporary password is generated for root@localhost: nr2pK2jxQo<j
#重新初始化
mysql_secure_installation
#登录数据库
mysql -uroot -p
#修改密码复杂度,可以不做
set global validate_password_policy=LOW;
set global validate_password_length=6;
#创建业务数据库
create database java_demo;
create user java@'%' IDENTIFIED by '123456';  
grant all on java.* to java@'%';  
flush privileges;
exit

4- 安装k8s集群

  1. 可以下载使用我的一键安装脚本:
    https://download.youkuaiyun.com/download/qq_35550345/14909351
  2. 也可以根据文档一步步手动安装:
    https://github.com/opsnull/follow-me-install-kubernetes-cluster
  3. 记得安装coredns
  • 我使用自己的一键安装脚本部署,所以此处就省略了该步骤~
  • 验证一下集群功能:
    在这里插入图片描述
    在这里插入图片描述

5- k8s中部署prometheus

git clone https://github.com/coreos/kube-prometheus.git
cd kube-prometheus
# kube-prometheus/manifests/alertmanager-alertmanager.yaml 的replicas数改成1(replicas=3时,alertmanager一直crash不知道为什么,后续再看吧。)
cd manifests/setup && kubectl apply -f .
cd manifest && kubectl apply -f .

在这里插入图片描述

# 配置集群外部访问各组件的端口
# alertmanager:  kubectl edit svc alertmanager-main -n monitoring
apiVersion: v1
kind: Service
metadata:
  labels:
    alertmanager: main
  name: alertmanager-main
  namespace: monitoring
spec:
  ports:
  - name: web
    port: 9093
    targetPort: web
    nodePort: 30093
  type: NodePort
  selector:
    alertmanager: main
    app: alertmanager
  sessionAffinity: ClientIP

# grafana: kubectl edit svc grafana -n monitoring
apiVersion: v1
kind: Service
metadata:
  labels:
    app: grafana
  name: grafana
  namespace: monitoring
spec:
  ports:
  - name: http
    port: 3000
    targetPort: http
    nodePort: 30030
  type: NodePort
  selector:
    app: grafana

# prometheus: kubectl edit prometheus-k8s grafana -n monitoring
apiVersion: v1
kind: Service
metadata:
  labels:
    prometheus: k8s
  name: prometheus-k8s
  namespace: monitoring
spec:
  ports:
  - name: web
    port: 9090
    targetPort: web
    nodePort: 29090
  type: NodePort
  selector:
    app: prometheus
    prometheus: k8s
  sessionAffinity: Client
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鬼刺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值