Kubernetes 之 Prometheus 监控 Tomcat、Redis、Mysql、Haproxy、Nginx、Ingress Nginx (五)

一、Tomcat-Java exporter

[root@xksmaster1 tomcat-image]# ll
total 473756
-rw-r--r-- 1 root root       185 Apr 28 09:50 build-command.sh
-rw-r--r-- 1 root root       692 Apr 26 15:50 Dockerfile
-rw-r--r-- 1 root root      3405 Dec 17  2021 metrics.war
drwxr-xr-x 2 root root        52 Sep 11  2022 myapp
-rw-r--r-- 1 root root       175 Jul 16  2021 myapp.tar.gz
-rwxr-xr-x 1 root root       125 Jul 16  2021 run_tomcat.sh
-rw-r--r-- 1 root root      7590 Apr 26 15:50 server.xml
-rw-r--r-- 1 root root     59477 Dec 17  2021 simpleclient-0.8.0.jar
-rw-r--r-- 1 root root      5840 Dec 17  2021 simpleclient_common-0.8.0.jar
-rw-r--r-- 1 root root     21767 Dec 17  2021 simpleclient_hotspot-0.8.0.jar
-rw-r--r-- 1 root root      7104 Dec 17  2021 simpleclient_servlet-0.8.0.jar
-rw-r--r-- 1 root root 484967424 Dec 17  2021 tomcat-8.5.73-jdk11-corretto.tar.gz
-rw-r--r-- 1 root root     19582 Dec 17  2021 tomcat_exporter_client-0.0.12.jar
-rw-r--r-- 1 root root      3405 Dec 17  2021 tomcat_exporter_servlet-0.0.12.war

#build-command.sh
[root@xksmaster1 tomcat-image]# vim build-command.sh
#!/bin/bash
docker build -t harbor.magedu.net/magedu/tomcat-app1:v1 .

#Docker File
[root@xksmaster1 tomcat-image]# cat Dockerfile
FROM tomcat:8.5.73
LABEL maintainer="jack 2973707860@qq.com"

ADD server.xml /usr/local/tomcat/conf/server.xml
RUN mkdir /data/tomcat/webapps -p
ADD myapp /data/tomcat/webapps/myapp
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.12.jar /usr/local/tomcat/lib/
#ADD run_tomcat.sh /apps/tomcat/bin/
EXPOSE 8080 8443 8009
#CMD ["/apps/tomcat/bin/catalina.sh","run"]
#CMD ["/apps/tomcat/bin/run_tomcat.sh"]

bash build-command.sh

#测试是否正常可以访问 192.168.40.180:8082/myapp 正常回显 : tomcat app1
#测试是否正常可以访问 192.168.40.180:8082/metrics 正常回显 : 数据
docker run -it --rm -p 8082:8080 harbor.magedu.net/magedu/tomcat-app1:v1

#配置Prometheus  文件

  - job_name: "prometheus-tomcat-metrics"
    static_configs:
      - targets: ["192.168.19.180:8082"]

#导入模板
https://github.com/nlighten/tomcat_exporter/tree/master/dashboard

=========================================================================================
以下是部署到k8s 配置yaml文件
[root@xksmaster1 tomcat-image]# docker images
REPOSITORY                             TAG            IMAGE ID       CREATED         SIZE
harbor.magedu.net/magedu/tomcat-app1   v1             c77e9fe51c18   41 hours ago    1.16GB
kubernetesui/dashboard                 v2.7.0         07655ddf2eeb   7 months ago    246MB
kubernetesui/metrics-scraper           v1.0.8         115053965e86   11 months ago   43.8MB
tomcat                                 8.5.73         2d2bccf89f53   16 months ago   678MB
oliver006/redis_exporter               latest         eeb98a1e7665   16 months ago   8.83MB
kubernetesui/dashboard                 v2.0.0-beta8   eb51a3597525   3 years ago     90.8MB
kubernetesui/metrics-scraper           v1.0.1         709901356c11   3 years ago     40.1MB
#生成的容器 保存传入到其他两个节点进行部署
[root@xksmaster1 tomcat-image]# docker save -o tomcat-app1.tar.gz harbor.magedu.net/magedu/tomcat-app1:v1
[root@xksmaster1 tomcat-image]# scp tomcat-app1.tar.gz xksnode1:/root
tomcat-app1.tar.gz                                                                                                                                                                                                                                                                      100% 1122MB  66.0MB/s   00:17
[root@xksmaster1 tomcat-image]# scp tomcat-app1.tar.gz xksnode2:/root
tomcat-app1.tar.gz


#部署Yaml文件 metrics Nodeport开放 31080端口继续访问
[root@xksmaster1 yaml]# pwd
/root/prometheus/20220911/prometheus-case-files/prometheus-files/case/app-monitor-case/tomcat/yaml
[root@xksmaster1 yaml]# ll
total 8
-rw-r--r-- 1 root root 626 Apr 28 10:09 tomcat-deploy.yaml
-rw-r--r-- 1 root root 259 Sep  8  2022 tomcat-svc.yaml
[root@xksmaster1 yaml]# cat tomcat-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tomcat-deployment
  namespace: default
spec:
  selector:
    matchLabels:
     app: tomcat
  replicas: 1 # tells deployment to run 2 pods matching the template
  template: # create pods using pod definition in this template
    metadata:
      labels:
        app: tomcat
      annotations:
        prometheus.io/scrape: 'true'
    spec:
      containers:
      - name: tomcat
        image: harbor.magedu.net/magedu/tomcat-app1:v1
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
        securityContext:
          privileged: true
[root@xksmaster1 yaml]# cat tomcat-svc.yaml
kind: Service  #service 类型
apiVersion: v1
metadata:
  annotations:
    prometheus.io/scrape: 'true'
  name: tomcat-service
spec:
  selector:
    app: tomcat
  ports:
  - nodePort: 31080
    port: 80
    protocol: TCP
    targetPort: 8080
  type: NodePort


[root@xksmaster1 yaml]# kubectl apply -f .
deployment.apps/tomcat-deployment created
service/tomcat-service created

然后进行访问

 

二、mysqld_exporter

#安装mariadb数据库
yum install -y mariadb-server
systemctl start mariadb
systemctl status mariadb
mysql

#授权监控个账户权限
CREATE USER 'mysql_exporter'@'localhost' IDENTIFIED BY '123456' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'localhost';
#验证权限
mysql -u mysql_exporter -p123456 -hlocalhost

#下载准备mysqld_exporter环境
cd /usr/local/src
https://github.com/prometheus/mysqld_exporter/releases
https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz

tar zxvf mysqld_exporter-0.14.0.linux-amd64.tar.gz
cd mysqld_exporter-0.14.0.linux-amd64/
cp mysqld_exporter /usr/local/bin/

#免密码登录配置:
# vim /root/.my.cnf
[client]
user=mysql_exporter
password=123456
#验证权限
mysql

#启动 mysql_exporter:
# vim/etc/systemd/system/mysqld_exporter.service
[Unit]
Description=Prometheus Node Exporter
After=network.target

[Service]
ExecStart=/usr/local/bin/mysqld_exporter --config.my-cnf=/root/.my.cnf

[Install]
WantedBy=multi-user.target

# systemctl daemon-reload
# systemctl restart mysqld_exporter
# systemctl enable mysqld_exporter

[root@xksmaster1 ~]# netstat -nltp
tcp6       0      0 :::9104                 :::*                    LISTEN      25513/mysqld_export

#http://192.168.19.180:9104/

配置Prometheus文件

[root@xksmaster1 prometheus]# vim prometheus.yml
- job_name: "prometheus-mysqld_exporter"
    static_configs:
      - targets: ["192.168.19.180:9104"]
      
systemctl restart prometheus.service

 

添加导入Grafana 模板-11323-13106

三、Haproxy_exporter

#1、安装配置haproxy
yum install -y haproxy
systemctl start haproxy
systemctl status haproxy
systemctl enable haproxy

#2、配置haproxy.cfg配置文件
[root@xksnode1 prometheus]# vim /etc/haproxy/haproxy.cfg
#添加socket文件配置 
 #turn on stats unix socket
 #stats socket /var/lib/haproxy/stats
  stats socket /run/haproxy/admin.sock mode 660 level admin
 #stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners#添加测试页
listen stats
  bind :9999
  stats enable
  stats uri /haproxy-status
  stats realm HAPorxy Stats\ Page
  stats auth haadmin:123456
  stats auth admin:123456
#添加代理配置  
listen prometheu-server-9092
  bind :9092
  mode http
  server 192.168.19.180 192.168.19.180:9090 check inter 3s fall 3 rise 5

#手动创建一下这个文件 否则启动会报错
[root@xksnode1 prometheus]# mkdir /run/haproxy
[root@xksnode1 prometheus]# touch /run/haproxy/admin.sock

#3、重启haproxy服务
[root@xksnode1 prometheus]# systemctl restart haproxy
[root@xksnode1 prometheus]# systemctl status haproxy

#4、下载haproxy_exporter
https://github.com/prometheus/haproxy_exporter/releases/download/v0.13.0/haproxy_exporter-0.13.0.linux-amd64.tar.gz

tar zxvf haproxy_exporter-0.13.0.linux-amd64.tar.gz
cp haproxy_exporter-0.13.0.linux-amd64/haproxy_exporter /usr/local/bin

#5、启动haproxy_exporter
方法一:
haproxy_exporter --haproxy.scrape-uri=unix:/run/haproxy/admin.sock
方法二:
[root@xksnode1 prometheus]# haproxy_exporter  --haproxy.scrape-uri="http://haadmin:123456@192.168.19.181:9999/haproxy-status?stats;csv" &
ts=2023-04-27T04:00:22.932Z caller=haproxy_exporter.go:584 level=info msg="Starting haproxy_exporter" version="(version=0.13.0, branch=HEAD, revision=c5c72aa059b69c18ab38fd63777653c13eddaa7f)"
ts=2023-04-27T04:00:22.932Z caller=haproxy_exporter.go:585 level=info msg="Build context" context="(go=go1.17.3, user=root@77b4a325967c, date=20211126-09:54:08)"
ts=2023-04-27T04:00:22.932Z caller=haproxy_exporter.go:603 level=info msg="Listening on address" address=:9101
ts=2023-04-27T04:00:22.932Z caller=tls_config.go:195 level=info msg="TLS is disabled." http2=false

#6、检测 haproxy_exporter是否打开端口 9101并且访问
[root@xksnode1 ~]# netstat -ntlp | grep 9101
tcp6       0      0 :::9101                 :::*                    LISTEN      12628/haproxy_expor
浏览器访问:
http://192.168.19.181:9101/

#7、配置Prometheus文件
[root@xksmaster1 exporter]# vim /apps/prometheus/prometheus.yml
- job_name: "prometheus-haproxy_exporter"
    static_configs:
      - targets: ["192.168.19.181:9101"]

#8、Grafana导入模板367 2428

 

 

 

 

 

 

四、Redis监控

https://github.com/oliver006/redis_exporter

 

# pwd
/root/prometheus-files/case/app-monitor-case/redis/yaml

# 1、kubectl create ns studylinux-net
# 2、redis-deployment.yaml 两个容器 一个redis服务端口为6379、另一个redis-exporter服务端口:9121
[root@xianchaomaster1 yaml]# cat redis-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: redis
  namespace: studylinux-net
spec:
  replicas: 1
  selector:
    matchLabels:
      app: redis
  template:
    metadata:
      labels:
        app: redis
    spec:
      containers:
      - name: redis
        image: redis:4.0.14
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 6379
      - name: redis-exporter
        image: oliver006/redis_exporter:latest
        resources:
          requests:
            cpu: 100m
            memory: 100Mi
        ports:
        - containerPort: 9121

# 3、redis-redis-svc.yaml 暴露外部访问端口 redis服务端口:31081
[root@xianchaomaster1 yaml]# cat redis-redis-svc.yaml
kind: Service  #service 类型
apiVersion: v1
metadata:
#  annotations:
#    prometheus.io/scrape: 'false'
  name: redis-redis-service
  namespace: studylinux-net
spec:
  selector:
    app: redis
  ports:
  - nodePort: 31081
    name: redis
    port: 6379
    protocol: TCP
    targetPort: 6379
  type: NodePort

# 4、redis-exporter-svc.yaml 暴露外部redis-exporter端口:31082
[root@xianchaomaster1 yaml]# cat redis-exporter-svc.yaml
kind: Service  #service 类型
apiVersion: v1
metadata:
  annotations:
    prometheus.io/scrape: 'true'
    prometheus.io/port: "9121"
  name: redis-exporter-service
  namespace: studylinux-net
spec:
  selector:
    app: redis
  ports:
  - nodePort: 31082
    name: prom
    port: 9121
    protocol: TCP
    targetPort: 9121
  type: NodePort

# 5、kubectl apply -f
deployment.apps/redis created
service/redis-exporter-service created
service/redis-redis-service created

# 6、验证redis-exporter metrics
http://192.168.40.180:31082/metrics

# 7、Prometheus配置文件
[root@xianchaomaster1 yaml]# cat /apps/prometheus/prometheus.yml
  - job_name: "prometheus-redis"
    static_configs:
      - targets: ["192.168.40.180:31082"]

# 8、grafana导入模板并验证-14615模板
http://192.168.40.182:3000/dashboard/import


# 9、验证redis服务是否正常
[root@xianchaomaster1 yaml]# cat redis-redis-svc.yaml ^C
[root@xianchaomaster1 yaml]# telnet 192.168.40.180 31081
Trying 192.168.40.180...
Connected to 192.168.40.180.
Escape character is '^]'.
set name xiaenting
+OK
set age 31
+OK
set nums 310
+OK
key *
-ERR unknown command `key`, with args beginning with: `*`,
keys *
*3
$4
name
$4
nums
$3
age

五、Nginx

# Nginx virtual host traffic status module(nginx-module-vts)
#1、克隆nginx-module-vts 模块
[root@xksnode2 prometheus]# git clone https://github.com/vozlt/nginx-module-vts.git
Cloning into 'nginx-module-vts'...
remote: Enumerating objects: 1042, done.
remote: Counting objects: 100% (241/241), done.
remote: Compressing objects: 100% (79/79), done.
remote: Total 1042 (delta 172), reused 188 (delta 156), pack-reused 801
Receiving objects: 100% (1042/1042), 1.14 MiB | 373.00 KiB/s, done.
Resolving deltas: 100% (695/695), done.

#2、下载nginx 源码包
[root@xksnode2 prometheus]# wget http://nginx.org/download/nginx-1.20.2.tar.gz
--2023-04-28 11:46:25--  http://nginx.org/download/nginx-1.20.2.tar.gz
Resolving nginx.org (nginx.org)... 52.58.199.22, 3.125.197.172, 2a05:d014:edb:5704::6, ...
Connecting to nginx.org (nginx.org)|52.58.199.22|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1062124 (1.0M) [application/octet-stream]
Saving to: ‘nginx-1.20.2.tar.gz’

100%[================================================================================================================================================================================================================================================================================>] 1,062,124    390KB/s   in 2.7s

2023-04-28 11:46:33 (390 KB/s) - ‘nginx-1.20.2.tar.gz’ saved [1062124/1062124]

[root@xksnode2 prometheus]# ll
total 100512
-rw-r--r-- 1 root root  1062124 Nov 16  2021 nginx-1.20.2.tar.gz
drwxr-xr-x 9 root root      177 Apr 28 11:45 nginx-module-vts

#3、进行编译nginx模板
[root@xksnode2 nginx-1.20.2]#tar zxvf nginx-1.20.2.tar.gz
[root@xksnode2 nginx-1.20.2]#cd nginx-1.20.2
[root@xksnode2 nginx-1.20.2]#yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel pcre-devel
[root@xksnode2 nginx-1.20.2]#
./configure --prefix=/apps/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=/root/prometheus/nginx-module-vts/
[root@xksnode2 nginx-1.20.2]# make & make install 

#4、配置状态页
[root@xksnode2 ~]# vim /apps/nginx/conf/nginx.conf
   #gzip  on;
     vhost_traffic_status_zone; #启动状态页

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://192.168.19.180:9090;#反向代理到 Prometheus
        }

        location /status{
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
}

[root@xksnode2 ~]# /apps/nginx/sbin/nginx -t
nginx: the configuration file /apps/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /apps/nginx/conf/nginx.conf test is successful
[root@xksnode2 ~]# /apps/nginx/sbin/nginx

#5、验证访问状态页
#访问 status状态页 、 反向代理80端口到prometheus
http://192.168.40.182:80
http://192.168.40.182/status

#6、安装nginx exporter
GitHub:https://github.com/hnlq715/nginx-vts-exporter/releases
包下载地址:https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz

[root@xksnode2 prometheus]# wget https://github.com/hnlq715/nginx-vts-exporter/releases/download/v0.10.3/nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
[root@xksnode2 prometheus]# tar zxvf nginx-vts-exporter-0.10.3.linux-amd64.tar.gz
nginx-vts-exporter-0.10.3.linux-amd64/
nginx-vts-exporter-0.10.3.linux-amd64/LICENSE
nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter
[root@xksnode2 prometheus]# cp nginx-vts-exporter-0.10.3.linux-amd64/nginx-vts-exporter /usr/local/bin/
[root@xksnode2 prometheus]# nginx-vts-exporter -nginx.scrape_uri http://192.168.40.182/status/format/json
2023/04/28 12:17:44 Starting nginx_vts_exporter (version=0.10.3, branch=HEAD, revision=8aa2881c7050d9b28f2312d7ce99d93458611d04)
2023/04/28 12:17:44 Build context (go=go1.10, user=root@56ca8763ee48, date=20180328-05:47:47)
2023/04/28 12:17:44 Starting Server at : :9913
2023/04/28 12:17:44 Metrics endpoint: /metrics
2023/04/28 12:17:44 Metrics namespace: nginx
2023/04/28 12:17:44 Scraping information from : http://192.168.19.182/status/format/json

#7、打开url 访问是否正常metics 端口:9913
[root@xksnode2 ~]# netstat -nltp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp6       0      0 :::9913                 :::*                    LISTEN      113780/nginx-vts-ex

http://192.168.19.182:9913/metrics

#8、配置prometheus
[root@xksmaster1 yaml]# vim /apps/prometheus/prometheus.yml
  - job_name: "prometheus-nginx"
    static_configs:
      - targets: ["192.168.19.182:9913"]

[root@xksmaster1 yaml]# systemctl restart prometheus

#9、配置Grafana
ID:https://grafana.com/grafana/dashboards/2949

六、Ingress Nginx

#部署 Ingress Nginx
#https://www.cnblogs.com/birkhoffxia/articles/17998192

#修改yaml文件 ports一段添加 10254端口
        ports:
        - containerPort: 10254
          name: prometrics
          protocol: TCP

#修改svc文件 添加下面配置 暴露10254到宿主机31254端口
[root@ca-k8s-master01 Ingress]# kubectl edit -n ingress-nginx svc ingress-nginx-controller^C
 - appProtocol: http
    name: prometheus-metrics-port
    nodePort: 31254
    port: 10254
    protocol: TCP
    targetPort: 10254
#192.168.40.51 - 
[root@ca-k8s-master01 Ingress]# kubectl  get svc -n ingress-nginx
NAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)                                      AGE
ingress-nginx-controller             LoadBalancer   10.105.225.205   192.168.40.51   80:30227/TCP,443:30795/TCP,10254:31254/TCP   8m40s
ingress-nginx-controller-admission   ClusterIP      10.103.133.140   <none>          443/TCP                                      8m40s

#访问地址
http://192.168.40.51:10254/metrics


#配置Prometheus Ccofig文件
[root@ca-k8s-master01 case]# vim case3-1-prometheus-cfg.yaml
    - job_name: "prometheus-Ingress-nginx"
      static_configs:
      - targets: ["192.168.40.51:10254"]

[root@ca-k8s-master01 case]# kubectl apply -f case3-1-prometheus-cfg.yaml
configmap/prometheus-config configured
[root@ca-k8s-master01 case]# kubectl  delete -f case3-2-prometheus-deployment.yaml
deployment.apps "prometheus-server" deleted
[root@ca-k8s-master01 case]# kubectl apply -f case3-2-prometheus-deployment.yaml
deployment.apps/prometheus-server created

#添加Grafana 模板 9614 没有添加过Ingress 规则  无数据 可以自己手动添加 Ingress规则

 

posted @ 2023-04-27 10:03  しみずよしだ  阅读(577)  评论(0)    收藏  举报