Promethus-day4-监控不携带metrics接口的服务

监控不携带metrics接口的服务

普罗米修斯的两种监控服务:

1.携带metrics接口的服务

可以通过metrics接口来获取服务的监控项、监控信息

2.不携带metrics接口的服务

通过EndPoint造一个metrict接口

PS:metrics(接口)

监控流程:

1、部署expertor,从而创建一个metrics接口

2、部署EndPrints,链接expertor暴露出来的metrics接口

3、部署Service,基于ServiceMonitor使用

4、创建ServiceMonitor,注入promethues

5、测试服务

6、加入grafana,做大屏展示

准备测试环境

[root@k8s-master1 ~]# cat /etc/nginx/conf.d/status.conf 
server {
	listen 8081;
	location / {
	    stub_status;
	}
	    
}

image-20210426184411707

1、部署expertor

  • 部署expertor,从而创建一个metrics接口
1)准备目录
[root@k8s-master1 ~]# mkdir exporter-nginx
[root@k8s-master1 ~]# cd exporter-nginx/
[root@k8s-master1 exporter-nginx]# vim exporter-nginx-deployment.yaml
2)创建服务
  • 创建一个服务,获取并格式化metrics接口数据
cat > exporter-nginx-deployment.yaml <<EOF
kind: Deployment
apiVersion: apps/v1
metadata:
  name: nginx-prometheus-exporter
spec:
  selector:
    matchLabels:
      app: nginx-prometheus-exporter
      deploy: nginx-exporter
  template:
    metadata:
      labels:
        app: nginx-prometheus-exporter
        deploy: nginx-exporter
    spec:
      containers:
        - name: nginx-exporter
          image: nginx/nginx-prometheus-exporter:0.9.0
          imagePullPolicy: IfNotPresent
          command:
            - "nginx-prometheus-exporter"
            - "-nginx.scrape-uri=http://192.168.12.11/status"
EOF
3)部署服务
[root@k8s-master1 exporter-nginx]# kubectl apply -f exporter-nginx-deployment.yaml 
deployment.apps/name-prometheus-exporter created
4)创建Service
  • 给予prometheus集群获取格式化好了的metrics接口服务
cat > exporter-service.yaml EOF
kind: Service
apiVersion: v1
metadata:
  name: nginx-prometheus-exporter
spec:
  ports:
    - port: 9113
      targetPort: 9113
      name: nginx-prometheus-exporter
      protocol: TCP
  selector:
    app: nginx-prometheus-exporter
    deploy: nginx-exporter
EOF
5)部署Service
[root@k8s-master1 exporter-nginx]# kubectl apply -f exporter-service.yaml
6)查看部署
[root@k8s-master1 exporter-nginx]# kubectl get svc,pod
NAME                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)     			     AGE
service/nginx-prometheus-exporter   ClusterIP   10.109.114.223   <none>     9113/TCP         3m19s

NAME                                             READY   STATUS    RESTARTS   AGE
pod/nginx-prometheus-exporter-7fdfcf6d7b-szt82   1/1     Running   0          6m10s
7)访问测试
[root@k8s-master1 exporter-nginx]# curl 10.109.114.223:9113/metrics
# HELP nginx_connections_accepted Accepted client connections
# TYPE nginx_connections_accepted counter
nginx_connections_accepted 4
# HELP nginx_connections_active Active client connections
# TYPE nginx_connections_active gauge
nginx_connections_active 1
# HELP nginx_connections_handled Handled client connections
# TYPE nginx_connections_handled counter

2、部署EndPrints

  • 部署EndPrints,链接expertor暴露出来的metrics接口
# 参考上述Service,此处无需重复创建。

3、部署Service

  • 基于ServiceMonitor使用
# 参考上述Service,此处无需重复创建。

4、创建ServiceMonitor

  • 创建ServiceMonitor,注入promethues
1)编写配置清单
cat > service-monitor.yaml <<EOF
kind: ServiceMonitor
apiVersion: monitoring.coreos.com/v1
metadata:
  labels:
    app: nginx-prometheus-exporter-servicemonitor
    deploy: nginx-exporter-servicemonitor
  name: nginx-monitor
  namespace: monitoring
spec:
  endpoints:
    - interval: 3s
      port: nginx-prometheus-exporter
  selector:
    matchLabels:
      app: nginx-prometheus-exporter
      deploy: nginx-exporter
  namespaceSelector:
    matchNames:
      - "default"
EOF
2)部署查看
[root@k8s-master1 exporter-nginx]# kubectl apply -f service-monitor.yaml
[root@k8s-master1 exporter-nginx]# kubectl get servicemonitor -n monitoring 
NAME                      AGE
nginx-monitor             25s
3)测试

在这里插入图片描述

4)加入grafana,做大屏展示

略~

监控Redis

1.部署测试环境

1)编写部署清单
cat > redis-deploy.yaml <EOF
kind: Deployment
apiVersion: apps/v1
metadata:
  name: redis
spec:
  selector:
    matchLabels:
      k8s: redis-exporter
  template:
    metadata:
      labels:
        k8s: redis-exporter
    spec:
      containers:
        - name: redis
          imagePullPolicy: IfNotPresent
          image: redis
EOF
2)编写Service清单
cat > redis-svc.yaml <<EOF
kind: Service
apiVersion: v1
metadata:
  name: redis-svc
  labels:
    k8s: redis-exporter
spec:
  ports:
    - port: 6379
      targetPort: 6379
      name: redis
  selector:
    k8s: redis-exporter
EOF
3)部署
[root@k8s-master1 exporter-redis]# kubectl apply -f redis-deploy.yaml
[root@k8s-master1 exporter-redis]# kubectl apply -f redis-svc.yaml

2.配置部署expertor

  • 配置部署expertor,从而创建一个metrics接口
1)编写部署清单
cat > redis-exporter-deploy.yaml <<EOF
kind: Deployment
apiVersion: apps/v1
metadata:
  name: redis-exporter-server
spec:
  selector:
    matchLabels:
      k8s: redis-exporter-server
  template:
    metadata:
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9121"
      labels:
        k8s: redis-exporter-server
    spec:
      containers:
        - name: redis
          image: oliver006/redis_exporter
          args:
            - "--redis.addr=redis://redis-svc.default.svc.cluster.local:6379"
          ports:
            - containerPort: 9121
EOF
2)编写svc清单
cat > redis-exporter-svc.yaml <<EOF
kind: Service
apiVersion: v1
metadata:
  name: redis-exporter-server
  labels:
    k8s: redis-exporter-server-svc
spec:
  ports:
    - port: 9121
      targetPort: 9121
      name: redis-exporter
  selector:
    k8s: redis-exporter-server
EOF
3)部署
[root@k8s-master1 exporter-redis]# kubectl apply -f redis-exporter-deploy.yaml
[root@k8s-master1 exporter-redis]# kubectl apply -f redis-exporter-svc.yaml

3.部署EndPrints

  • 部署EndPrints,链接expertor暴露出来的metrics接口
# 参考上述Service,此处无需重复创建。

4.部署Service

  • 部署Service,基于ServiceMonitor使用
# 参考上述Service,此处无需重复创建。

5.创建ServiceMonitor

  • 创建ServiceMonitor,注入promethues
1)编写配置清单
cat > redis-monitor.yaml <<EOF
kind: ServiceMonitor
apiVersion: monitoring.coreos.com/v1
metadata:
  labels:
    app: redis-prometheus-exporter-servicemonitor
    deploy: redis-exporter-servicemonitor
  name: redis-monitor
  namespace: monitoring
spec:
  endpoints:
    - interval: 3s
      port: redis-exporter
  selector:
    matchLabels:
      k8s: redis-exporter-server-svc
  namespaceSelector:
    matchNames:
      - "default"
EOF
2)部署
[root@k8s-master1 exporter-redis]# kubectl apply -f redis-monitor.yaml

6.grafana展示

在这里插入图片描述

监控Mysql

1.造环境

1)安装mariadb
[root@k8s-master1]# yum install mariadb\* -y
[root@k8s-master1]# systemctl enable --now mariadb
2)授权monitor用户
[root@k8s-master1]# mysql
MariaDB [(none)]> grant select,replication client,process ON *.* to 'mysql_monitor'@'%' identified by 'oldboy@123';
Query OK, 0 rows affected (0.00 sec)

PS:授权ip为localhost,因为不是prometheus服务器来直接找mariadb 获取数据,而是prometheus服务器找mysql_exporter,mysql_exporter 再找mariadb,所以这个localhost是指的mysql_exporter的IP

2.安装数据库exporter

1)编写部署清单
cat > mysql-deploy.yaml <<EOF
kind: Deployment
apiVersion: apps/v1
metadata:
  name: mysql-exporter-server
spec:
  selector:
    matchLabels:
      k8s: mysql-exporter-server
  template:
    metadata:
      labels:
        k8s: mysql-exporter-server
    spec:
      containers:
        - name: mysql
          image: prom/mysqld-exporter
          env:
            - name: DATA_SOURCE_NAME
              value: "mysql_monitor:oldboy@123@(mysql.default.svc.cluster.local:3306)"
          ports:
            - containerPort: 9104
EOF
2)编写Service清单
cat > mysql-svc.yaml <<EOF
kind: Service
apiVersion: v1
metadata:
  name: mysql-exporter-server
  labels:
    k8s: mysql-exporter-server-svc
spec:
  ports:
    - port: 9104
      targetPort: 9104
      name: mysql-exporter-port
      protocol: TCP
  selector:
    k8s: mysql-exporter-server
---
kind: ServiceMonitor
apiVersion: monitoring.coreos.com/v1
metadata:
  labels:
    app: mysql-prometheus-exporter-servicemonitor
    deploy: mysql-exporter-servicemonitor
  name: mysql-exporter-monitor
  namespace: monitoring
spec:
  endpoints:
    - interval: 3s
      port: mysql-exporter-port
  selector:
    matchLabels:
      k8s: mysql-exporter-server-svc
  namespaceSelector:
    matchNames:
      - "default"
EOF

3.部署服务

[root@k8s-master1 exporter-mysql]# kubectl apply -f mysql-deploy.yaml
[root@k8s-master1 exporter-mysql]# kubectl apply -f mysql-svc.yaml

监控exporter

  • 监控一个外部的exporter

1.造环境

1)下载部署exporter
#下载
[root@k8s-master1]# wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.1/mysqld_exporter-0.12.1.linux-amd64.tar.gz

# 解压
[root@k8s-master1]# tar -xf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /usr/local/

#查看
[root@k8s-master1]# ll /usr/localmysqld_exporter-0.12.1.linux-amd64
总用量 14484
-rw-r--r-- 1 3434 3434    11325 729 2019 LICENSE
-rwxr-xr-x 1 3434 3434 14813452 729 2019 mysqld_exporter
-rw-r--r-- 1 3434 3434       65 729 2019 NOTICE
1)安装mariadb
[root@k8s-master1]# yum install mariadb\* -y
[root@k8s-master1]# systemctl enable --now mariadb
2)授权monitor用户
[root@k8s-master1]# mysql
MariaDB [(none)]> grant select,replication client,process ON *.* to 'mysql_monitor'@'%' identified by 'oldboy@123';
Query OK, 0 rows affected (0.00 sec)

PS:授权ip为localhost,因为不是prometheus服务器来直接找mariadb 获取数据,而是prometheus服务器找mysql_exporter,mysql_exporter 再找mariadb,所以这个localhost是指的mysql_exporter的IP

2.配置maridb

  • 创建一个mariadb配置文件,写上连接的用户名与密码(和上面的授权的用户名 和密码要对应)
[root@k8s-master1]# vim /usr/local/mysqld_exporter-0.12.1/.my.cnf
[client]
user=mysql_monitor
password=123

3.启动mysqld_exporter

[root@k8s-master1]# nohup /usr/local/mysqld_exporter-0.12.1/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter-0.12.1/.my.cnf &

PS:确认端口是否为 9104
答:以下是一个示例的docker-compose.yml文件,用于启动Prometheus和Grafana来监控一个或多个应用程序: ``` version: '3' services: prometheus: image: prom/prometheus container_name: prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml command: - '--config.file=/etc/prometheus/prometheus.yml' restart: always grafana: image: grafana/grafana container_name: grafana depends_on: - prometheus ports: - "3000:3000" environment: GF_SERVER_ROOT_URL: http://localhost:3000 GF_SECURITY_ADMIN_USER: admin GF_SECURITY_ADMIN_PASSWORD: admin volumes: - ./grafana-data:/var/lib/grafana restart: always ``` 在该docker-compose.yml文件中,我们创建了两个服务prometheus和grafana。Prometheus服务使用Prometheus Docker映像,并将端口映射到9090。它还将/prometheus.yml文件作为挂载卷传递给容器。在启动容器时,我们使用命令行参数来指定/config.file=/etc/prometheus/prometheus.yml。 Grafana服务程序使用Grafana Docker映像,并依赖于prometheus服务。Grafana服务映射端口3000,并将以下环境变量传递给容器:GF_SERVER_ROOT_URL:使用localhost:3000 (在该容器中内部)作为grafana的根URL,GF_SECURITY_ADMIN_USER和GF_SECURITY_ADMIN_PASSWORD管理Grafana管理员的凭据。此服务还挂载了grafana-data目录,以便可以在重启容器时保留所有Grafana的设置。 最后,我们定义了restart: always参数以确保容器在退出时自动重新启动。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

秋风お亦冷

感觉不错,您可以博主进行打赏噢

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

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

打赏作者

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

抵扣说明:

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

余额充值