1. 程式人生 > 其它 >Springboot入門系列(十)prometheus+grafana監控+docker配置prometheus

Springboot入門系列(十)prometheus+grafana監控+docker配置prometheus

技術標籤:springbootlinuxdockerjava

Springboot與監控

一、原因

一個完整的專案必然要監控,不然出了問題就沙雕了。而prometheus+grafana因為:

  • 炫酷好看(重點)
  • 天然支援k8s+docker
  • 完美適配springboot

所以被選為監控的第一技術選型

二、springboot使用

先從簡單的部分開始
我們先不考慮怎麼部署prometheus+grafana環境,預設已經有了,那springboot怎麼用?

step1 pom

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <!-- 藉助 Micrometer 對接 Prometheus 監控系統 -->
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-registry-prometheus</artifactId> </dependency>

這倆是必須的

step2 yml

spring:
  application:
    name: monitoring-prometheus-grafana


management:
  endpoints:
    web:
      exposure:
        # 將 Actuator 的 /actuator/prometheus 端點暴露出來
        include: 'prometheus'
  metrics:
    tags:
      application: ${spring.application.name}


server:
  port: 9876

port隨意,application-name必須有,management就是prometheus的部分,其中會引用到application-name屬性

step3 啟動專案

如果正確配置,那麼會有:
正確資訊

step4 在prometheus中配置服務,重啟prometheus

global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
alerting:
  alertmanagers:
  - static_configs:
    - targets:
rule_files:
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'agent-node'
    static_configs:
    - targets: ['localhost:9100']
  - job_name: 'spring-node'
    scrape_interval: 5s
    metrics_path: '/actuator/prometheus'
    static_configs:
    - targets: ['localhost:9876']

最後那個job_name就是我們的服務,會被普羅米修斯監控到。這部分看不懂不要緊,下面會詳細說普羅米修斯在單機和docker的玩法

三、prometheus+grafana in local

本機配普羅米修斯
以MAC為例

1、安裝

brew install promethus或從官網下載
brew install node_exporter或從官網下載
brew install grafana或從官網下載
複製前文的yml內容,生成一個配置檔案,如:
vi /Users/xxx/prometheus.yml
記好這個位置

prometheus /Users/xxx/prometheus.yml啟動,訪問http://localhost:9090/targets全綠則沒問題

node_exporter直接起就行
grafana同理

2、訪問grafana

http://localhost:3000
不贅述grafana新增資料來源什麼的了,百度很多

四、in docker

建立虛擬機器,本次使用centos7
cd /etc/sysconfig/network-scripts/
ls檢視,會有一個你的網絡卡配置檔案
vi ipcfg-xxx,把onboot欄位的no改成yes
service network restart啟用網路
yum update更新系統環境到latest
systemctl disable firewalld關閉/禁用防火牆
systemctl stop firewalld

yum install docker安裝docker
service docker start啟動docker
docker pull prom/prometheus拉取映象
docker pull prom/node-exporter
docker pull grafana/grafana
準備一個如上的配置檔案promethus,yml

docker run --restart=unless-stopped -d --name=grafana -p 3000:3000 grafana/grafana
docker run --restart=unless-stopped -d --name=prometheus -p 9090:9090 -v /home/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
docker run --restart=unless-stopped -d --name=node-exporter -p 9100:9100 -v /etc/localtime:/etc/localtime prom/node-exporter

主機訪問虛擬機器ip:3000開啟grafana頁面則成功

五、常見問題

如果docker run prometheus不能訪問yml,則先把yml檔案cp到docker裡
docker cp /xx/xx/prometheus.yml prometheus:/etc/prometheus/prometheus.yml
然後
docker restart prometheus

如果docker run提示已經存在某個名字的容器:
docker rm -f prometheus

完畢