kuberneters部署Prometheus+Grafana监控系统

一、Prometheus与Grafana简介

Prometheus: 一个开源指标监控解决方案,指标就是指的CPU的使用率、内存使用率等数据.

Grafana: 是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知.

Prometheus架构图:

二、监控系统部署

1、纯docker方式部署 

创建一个文件夹用于存放prometheus的数据文件和配置文件:

mkdir -p /data/prometheus/data  # 这个data文件夹共享给docker存放prometheus的数据 

创建prometheus的配置文件prometheus.yaml:

vim /data/prometheus/prometheus.yaml
#############################################
global:
  scrape_interval:     15s 
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['127.0.0.1:9090']
  - job_name: 'node'
    scrape_interval: 8s
    static_configs:
    - targets: ['xxx.xxx.xxx.xxx:9100']  # 此处我们先预留,等后面我们装好node_exporter后再回来配置
#############################################

docker方式启动node_exporter:

docker run --name node3 -d -p 9100:9100 prom/node-exporter

此时已经启动了一个监听代理node-exporter,我们通过访问 http://127.0.0.1:9100/metrics 来验证监听是否启动,出现如下信息证明node-exporter启动正常。

将node-exporter服务端口暴露给prometheus,去修改prometheus.yaml,保存后,我们就可以启动prometheus进行监控了:

vim /data/prometheus/prometheus.yaml
#############################################
global:
  scrape_interval:     15s 
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['127.0.0.1:9090']
  - job_name: 'node'
    scrape_interval: 8s
    static_configs:
    - targets: ['127.0.0.1:9100']  # 此处我们先预留,等后面我们装好node_exporter后再回来配置
#############################################scrape_configs:      - job_name: 'prometheus'        static_configs:        - targets: ['127.0.0.1:9090']      - job_name: 'node'        scrape_interval: 8s        static_configs:        - targets: ['127.0.0.1:9100']  # 此处我们先预留,等后面我们装好node_exporter后再回来配置    #############################################    ```

docker方式启动prometheus:

docker run  -d -p 9090:9090 -v /data/prometheus/data:/prometheus -v /data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml --name pro prom/prometheus --config.file=/etc/prometheus/prometheus.yml

此时我们可以通过访问 http://127.0.0.1:9090/targets 来查看prometheus的运行状态。

此时我们看到node与prometheus两个节点的状态均为UP表示监控节点和主节点都正常运行起来了。

docker方式启动grafana:

docker run -p -d  3000:3000 --name grafana grafana/grafan

此时我们可以通过访问 http://127.0.0.1:3000/ 访问grafana,第一次使用还是要重置admin密码,初始账号密码均为admin。

配置prometheus监控增加数据源:

选择prometheus:

配置prometheus,填写prometheus地址,这个地方一定要填写docker分配给机器的那个网卡的ip,点击下方Save&Test进行测试: 

引入监控模版: 

输入8919,点击load: 

选择我们创建好的data,给面板一个名称,点击import,监控面板创建成功。 

然后我们就可以看到对这台机器的监控数据了。

2、K8s方式部署

创建namespace prometheus:

kubectl create namespace prometheus

创建一个文件夹用于存放prometheus的数据文件和配置文件:

mkdir -p /data/prometheus/data  # 这个data文件夹共享给docker存放prometheus的数据

创建prometheus的配置文件prometheus.yaml:

vim /data/prometheus/prometheus.yaml
#############################################
global:
  scrape_interval:     15s 
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['127.0.0.1:9090']
  - job_name: 'node'
    scrape_interval: 8s
    static_configs:
    - targets: ['xxx.xxx.xxx.xxx:9100']  # 此处我们先预留,等后面我们装好node_exporter后再回来配置
#############################################

启动node_exporter:

# 创建svc
apiVersion: v1
kind: Service
metadata:
  name: exporter
  namespace: prometheus
  labels:
    name: exporter
spec:
  type: NodePort
  ports:
  - port: 9100
    targetPort: 9100
    protocol: TCP
    nodePort: 31901
  selector:
    app: exporter
    
# 创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: exporter
  namespace: prometheus
  labels:
    app: exporter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: exporter
  template:
    metadata:
      labels:
        app: exporter
    spec:
        hostname: exporter
        containers:
         - image: prom/node-exporter
           imagePullPolicy: IfNotPresent
           name: grafana
           ports:
             - name: exporter-port
               containerPort: 31901

将node-exporter服务端口暴露给prometheus,去修改prometheus.yaml,保存后,我们就可以启动prometheus进行监控了:

vim /data/prometheus/prometheus.yaml
#############################################
global:
  scrape_interval:     15s 
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['127.0.0.1:9090']
  - job_name: 'node'
    scrape_interval: 8s
    static_configs:
    - targets: ['exporter.prometheus:31900']  # 此处我们先预留,等后面我们装好node_exporter后再回来配置
#############################################

启动prometheus:

# 创建svc
apiVersion: v1
kind: Service
metadata:
  name: prometheus
  namespace: prometheus
  labels:
    name: prometheus
spec:
  type: NodePort
  ports:
  - port: 9090
    targetPort: 9090
    protocol: TCP
    nodePort: 31900
  selector:
    app: prometheus

# 创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: prometheus
  namespace: prometheus
  labels:
    app: prometheus
spec:
  replicas: 1
  selector:
    matchLabels:
      app: prometheus
  template:
    metadata:
      labels:
        app: prometheus
    spec:
        hostname: prometheus
        containers:
          - image: prom/prometheus
            imagePullPolicy: IfNotPresent
            name: grafana
            ports:
              - name: prometheus-port
                containerPort: 9090
            volumeMounts:
              - mountPath: /prometheus
                name: data
              - mountPath: /etc/prometheus
                name: config
        volumes:
          - name: data
            hostPath:
              path: /data/prometheus/data
              type: Directory
          - name: config
            hostPath:
              path: /data/prometheus/etc
              type: Directory
# 此处创建prometheus 采用简易方式,简易实用configMap和NFS配合

启动grafana:

# 创建svc
apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: prometheus
  labels:
    name: grafana
spec:
  type: NodePort
  ports:
  - port: 3000
    targetPort: 3000
    protocol: TCP
    nodePort: 30000
  selector:
    app: grafana
    
# 创建Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  name: grafana
  namespace: prometheus
  labels:
    app: grafana
spec:
  replicas: 1
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
        hostname: grafana
        containers:
         - image: grafana/grafana
           imagePullPolicy: IfNotPresent
           name: grafana
           ports:
             - name: grafana-port
               containerPort: 3000

至此通过K8s创建完成,后续我们后补充一些报警相关内容,配置部分参考上面内容,唯一区别在于grafana配置prometheus地址时要写prometheus.prometheus:9090。

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/127292803