1. 程式人生 > >基於Prometheus搭建SpringCloud全方位立體監控體系

基於Prometheus搭建SpringCloud全方位立體監控體系

前提

最近公司在聯合運維做一套全方位監控的系統,應用叢集的技術棧是SpringCloud體系。雖然本人沒有參與具體基礎架構的研發,但是從應用引入的包和一些資料的查閱大致推算出具體的實現方案,這裡做一次推演,詳細記錄一下整個搭建過程。

Prometheus是什麼

Prometheus(普羅米修斯,官網是https://prometheus.io/),是一個開源的系統監控和告警的工具包,其採用Pull方式採集時間序列的度量資料,通過Http協議傳輸。它的工作方式是被監控的服務需要公開一個Prometheus端點,這端點是一個HTTP介面,該介面公開了度量的列表和當前的值,然後Prometheus應用從此介面定時拉取資料,一般可以存放在時序資料庫中,然後通過視覺化的Dashboard(例如Promdash或者Grafana)進行資料展示。當然,此文章不打算深入研究這個工具,只做應用層面的展示。這篇文章將會用到下面幾個技術棧:

  • SpringCloud體系,主要是註冊中心和註冊客戶端。
  • spring-boot-starter-actuator,主要是提供了Prometheus端點,不用重複造輪子。
  • Prometheus的Java客戶端。
  • Prometheus應用。
  • io.micrometer,SpringBoot標準下使用的度量工具包。
  • Grafana,視覺化的Dashboard。

這裡所有的軟體或者依賴全部使用當前的最新版本,如果有坑踩了再填。其實,Prometheus本身也開發了一套Counter、Gauge、Timer等相關介面,不過SpringBoot中使用了io.micrometer中的套件,所以本文不深入分析Prometheus的Java客戶端。

io.micrometer的使用

在SpringBoot2.X中,spring-boot-starter-actuator引入了io.micrometer,對1.X中的metrics進行了重構,主要特點是支援tag/label,配合支援tag/label的監控系統,使得我們可以更加方便地對metrics進行多維度的統計查詢及監控。io.micrometer目前支援Counter、Gauge、Timer、Summary等多種不同型別的度量方式(不知道有沒有遺漏),下面逐個簡單分析一下它們的作用和使用方式。 需要在SpringBoot專案下引入下面的依賴:

<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-core</artifactId>
  <version>${micrometer.version}</version>
</dependency>

目前最新的micrometer.version為1.0.5。注意一點的是:io.micrometer支援Tag(標籤)的概念,Tag是其metrics是否能夠有多維度的支援的基礎,Tag必須成對出現,也就是必須配置也就是偶數個Tag,有點類似於K-V的關係。

Counter

Counter(計數器)簡單理解就是一種只增不減的計數器。它通常用於記錄服務的請求數量、完成的任務數量、錯誤的發生數量等等。舉個例子:

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;

/**
 * @author throwable
 * @version v1.0
 * @description
 * @since 2018/7/19 23:10
 */
public class CounterSample {

    public static void main(String[] args) throws Exception {
        //tag必須成對出現,也就是偶數個
        Counter counter = Counter.builder("counter")
                .tag("counter", "counter")
                .description("counter")
                .register(new SimpleMeterRegistry());
        counter.increment();
        counter.increment(2D);
        System.out.println(counter.count());
        System.out.println(counter.measure());
        //全域性靜態方法
        Metrics.addRegistry(new SimpleMeterRegistry());
        counter = Metrics.counter("counter", "counter", "counter");
        counter.increment(10086D);
        counter.increment(10087D);
        System.out.println(counter.count());
        System.out.println(counter.measure());
    }
}

輸出:

3.0
[Measurement{statistic='COUNT', value=3.0}]
20173.0
[Measurement{statistic='COUNT', value=20173.0}]

Counter的Measurement的statistic(可以理解為度量的統計角度)只有COUNT,也就是它只具備計數(它只有增量的方法,因此只增不減),這一點從它的介面定義可知:

public interface Counter extends Meter {

  default void increment() {
        increment(1.0);
  }

  void increment(double amount);

  double count();

  //忽略其他方法或者成員
}

Counter還有一個衍生型別FunctionCounter,它是基於函式式介面ToDoubleFunction進行計數統計的,用法差不多。

Gauge

Gauge(儀表)是一個表示單個數值的度量,它可以表示任意地上下移動的數值測量。Gauge通常用於變動的測量值,如當前的記憶體使用情況,同時也可以測量上下移動的"計數",比如佇列中的訊息數量。舉個例子:

import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.Metrics;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author throwable
 * @version v1.0
 * @description
 * @since 2018/7/19 23:30
 */
public class GaugeSample {

    public static void main(String[] args) throws Exception {
        AtomicInteger atomicInteger = new AtomicInteger();
        Gauge gauge = Gauge.builder("gauge", atomicInteger, AtomicInteger::get)
                .tag("gauge", "gauge")
                .description("gauge")
                .register(new SimpleMeterRegistry());
        atomicInteger.addAndGet(5);
        System.out.println(gauge.value());
        System.out.println(gauge.measure());
        atomicInteger.decrementAndGet();
        System.out.println(gauge.value());
        System.out.println(gauge.measure());
        //全域性靜態方法,返回值竟然是依賴值,有點奇怪,暫時不選用
        Metrics.addRegistry(new SimpleMeterRegistry());
        AtomicInteger other = Metrics.gauge("gauge", atomicInteger, AtomicInteger::get);
    }
}

輸出結果:

5.0
[Measurement{statistic='VALUE', value=5.0}]
4.0
[Measurement{statistic='VALUE', value=4.0}]

Gauge關注的度量統計角度是VALUE(值),它的構建方法中依賴於函式式介面ToDoubleFunction的例項(如例子中的例項方法引用AtomicInteger::get)和一個依賴於ToDoubleFunction改變自身值的例項(如例子中的AtomicInteger例項),它的介面方法如下:

public interface Gauge extends Meter {

  double value();

  //忽略其他方法或者成員
}

Timer

Timer(計時器)同時測量一個特定的程式碼邏輯塊的呼叫(執行)速度和它的時間分佈。簡單來說,就是在呼叫結束的時間點記錄整個呼叫塊執行的總時間,適用於測量短時間執行的事件的耗時分佈,例如訊息佇列訊息的消費速率。舉個例子:

import io.micrometer.core.instrument.Timer;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;

import java.util.concurrent.TimeUnit;

/**
 * @author throwable
 * @version v1.0
 * @description
 * @since 2018/7/19 23:44
 */
public class TimerSample {

    public static void main(String[] args) throws Exception{
        Timer timer = Timer.builder("timer")
                .tag("timer","timer")
                .description("timer")
                .register(new SimpleMeterRegistry());
        timer.record(()->{
            try {
                TimeUnit.SECONDS.sleep(2);
            }catch (InterruptedException e){
                //ignore
            }
        });
        System.out.println(timer.count());
        System.out.println(timer.measure());
        System.out.println(timer.totalTime(TimeUnit.SECONDS));
        System.out.println(timer.mean(TimeUnit.SECONDS));
        System.out.println(timer.max(TimeUnit.SECONDS));
    }
}

輸出結果:

1
[Measurement{statistic='COUNT', value=1.0}, Measurement{statistic='TOTAL_TIME', value=2.000603975}, Measurement{statistic='MAX', value=2.000603975}]
2.000603975
2.000603975
2.000603975

Timer的度量統計角度主要包括記錄執行的最大時間、總時間、平均時間、執行完成的總任務數,它提供多種的統計方法變體:

public interface Timer extends Meter, HistogramSupport {

  void record(long amount, TimeUnit unit);

  default void record(Duration duration) {
      record(duration.toNanos(), TimeUnit.NANOSECONDS);
  }

  <T> T record(Supplier<T> f);
    
  <T> T recordCallable(Callable<T> f) throws Exception;

  void record(Runnable f);

  default Runnable wrap(Runnable f) {
      return () -> record(f);
  }

  default <T> Callable<T> wrap(Callable<T> f) {
    return () -> recordCallable(f);
  }

  //忽略其他方法或者成員
}

這些record或者包裝方法可以根據需要選擇合適的使用,另外,一些度量屬性(如下限和上限)或者單位可以自行配置,具體屬性的相關內容可以檢視DistributionStatisticConfig類,這裡不詳細展開。

另外,Timer有一個衍生類LongTaskTimer,主要是用來記錄正在執行但是尚未完成的任務數,用法差不多。

Summary

Summary(摘要)用於跟蹤事件的分佈。它類似於一個計時器,但更一般的情況是,它的大小並不一定是一段時間的測量值。在micrometer中,對應的類是DistributionSummary,它的用法有點像Timer,但是記錄的值是需要直接指定,而不是通過測量一個任務的執行時間。舉個例子:


import io.micrometer.core.instrument.DistributionSummary;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;

/**
 * @author throwable
 * @version v1.0
 * @description
 * @since 2018/7/19 23:55
 */
public class SummarySample {

    public static void main(String[] args) throws Exception {
        DistributionSummary summary = DistributionSummary.builder("summary")
                .tag("summary", "summary")
                .description("summary")
                .register(new SimpleMeterRegistry());
        summary.record(2D);
        summary.record(3D);
        summary.record(4D);
        System.out.println(summary.measure());
        System.out.println(summary.count());
        System.out.println(summary.max());
        System.out.println(summary.mean());
        System.out.println(summary.totalAmount());
    }
}

輸出結果:

[Measurement{statistic='COUNT', value=3.0}, Measurement{statistic='TOTAL', value=9.0}, Measurement{statistic='MAX', value=4.0}]
3
4.0
3.0
9.0

Summary的度量統計角度主要包括記錄過的資料中的最大值、總數值、平均值和總次數。另外,一些度量屬性(如下限和上限)或者單位可以自行配置,具體屬性的相關內容可以檢視DistributionStatisticConfig類,這裡不詳細展開。

小結

一般情況下,上面的Counter、Gauge、Timer、DistributionSummary例子可以滿足日常開發需要,但是有些高階的特性這裡沒有展開,具體可以參考micrometer-spring-legacy這個依賴包,畢竟原始碼是老師,原始碼不會騙人。

spring-boot-starter-actuator的使用

spring-boot-starter-actuator在2.X版本中不僅升級了metrics為io.micrometer,很多配置方式也和1.X完全不同,鑑於前段時間沒有維護SpringBoot技術棧的專案,現在重新看了下官網複習一下。引入依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    <version>${springboot.version}</version>
</dependency>

目前最新的springboot.version為2.0.3.RELEASE。在spring-boot-starter-actuator中,最大的變化就是配置的變化,原來在1.X版本是通過management.security.enabled控制是否可以忽略許可權訪問所有的監控端點,在2.X版本中,必須顯式配置不需要許可權驗證對外開放的端點:

management.endpoints.web.exposure.include=*
management.endpoints.web.exposure.exclude=env,beans
management.endpoints.jmx.exposure.include=
management.endpoints.jmx.exposure.include=*

例如上面的配置,訪問非/env和非/beans的端點,可以不受許可權控制,也就是所有人都可以訪問非/env和非/beans的端點。例如,如果我只想暴露/health端點,只需配置:

management.endpoints.web.exposure.include=health

這一點需要特別注意,其他使用和1.X差不多。還有一點是,2.X中所有監控端點的訪問url的預設路徑字首為:http://${host}/${port}/actuator/,也就是想訪問health端點就要訪問http://${host}/${port}/actuator/health,當然也可以修改/actuator這個路徑字首。其他細節區別沒有深入研究,可以參考文件

搭建SpringCloud應用

接著先搭建一個SpringCloud應用群,主要包括註冊中心(registry-center)和一個簡單的服務節點(cloud-prometheus-sample),其中註冊中心只引入eureka-server的依賴,而服務節點用於對接Prometheus,引入eureka-client、spring-boot-starter-actuator、prometheus等依賴。

registry-center

registry-center是一個單純的服務註冊中心,只需要引入eureka-server的依賴,新增一個啟動類即可,新增的依賴如下:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

新增一個啟動類:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * @author throwable
 * @version v1.0
 * @description
 * @since 2018/7/21 9:06
 */
@SpringBootApplication
@EnableEurekaServer
public class RegistryCenterApplication {

    public static void main(String[] args) {
        SpringApplication.run(RegistryCenterApplication.class, args);
    }
}

配置檔案application.yaml如下:

server:
  port: 9091
spring:
  application:
    name: registry-center
eureka:
  instance:
    hostname: localhost
  client:
    enabled: true
    register-with-eureka: false
    fetch-registry: false
    service-url:
         defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

就是這麼簡單,啟動入口類即可,啟動的埠為9091。

cloud-prometheus-sample

cloud-prometheus-sample主要作為eureka-client,接入spring-boot-starter-actuator和prometheus依賴,引入依賴如下:

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

這裡引入的是micrometer-registry-prometheus而不是micrometer-spring-legacy是因為micrometer-spring-legacyspring-integration(spring系統整合)的依賴,這裡沒有用到,但是裡面很多實現可以參考。micrometer-registry-prometheus提供了基於actuator的端點,路徑是../prometheus。啟動類如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

/**
 * @author throwable
 * @version v1.0
 * @description
 * @since 2018/7/21 9:13
 */
@SpringBootApplication
@EnableEurekaClient
public class SampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }
}

配置檔案application.yaml如下:

server:
  port: 9092
spring:
  application:
    name: cloud-prometheus-sample
eureka:
  instance:
    hostname: localhost
  client:
    service-url: http://localhost:9091/eureka/

啟動埠為9092,eureka的服務註冊地址為:http://localhost:9091/eureka/,也就是registry-center中指定的預設資料區(defaultZone)的註冊地址,先啟動registry-center,再啟動cloud-prometheus-sample,然後訪問http://localhost:9091/:

sp-p-1

訪問http://localhost:9092/actuator/prometheus:

sp-p-2

這些資料就是實時的度量資料,Prometheus(軟體)配置好任務並且啟動執行後,就是通過定時拉取/prometheus這個端點返回的資料進行資料聚合和展示的。

接著,我們先定製一個功能,統計cloud-prometheus-sample所有入站的Http請求數量(包括成功、失敗和非法的),新增如下程式碼:

//請求攔截器
@Component
public class SampleMvcInterceptor extends HandlerInterceptorAdapter {

    private static final Counter COUNTER = Counter.builder("Http請求統計")
            .tag("HttpCount", "HttpCount")
            .description("Http請求統計")
            .register(Metrics.globalRegistry);

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
                                Object handler, Exception ex) throws Exception {
        COUNTER.increment();
    }
}
//自定義Mvc配置
@Component
public class SampleWebMvcConfigurer implements WebMvcConfigurer {

    @Autowired
    private SampleMvcInterceptor sampleMvcInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(sampleMvcInterceptor);
    }
}

重啟cloud-prometheus-sample,直接訪問幾次不存在的根節點路徑http://localhost:9092/,再檢視端點統計資料:

sp-p-3

安裝和使用Prometheus

先從Prometheus官方下載地址下載軟體,這裡用Windows10平臺演示,直接下載prometheus-2.3.2.windows-amd64.tar.gz,個人有軟體潔癖,用軟體或者依賴喜歡最高版本,出現坑了自己填。解壓後目錄如下:

sp-p-4

啟動的話,直接執行prometheus.exe即可,這裡先配置一下prometheus.yml:

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:
      # - alertmanager:9093
scrape_configs:
  - job_name: 'prometheus'
    metrics_path: /actuator/prometheus
    static_configs:
    - targets: ['localhost:9092']

我們主要修改的是scrape_configs節點下的配置,這個節點時配置同步任務的,這裡配置一個任務為'prometheus',拉取資料的路徑為/actuator/prometheus,目標host-port為'localhost:9092',也就是cloud-prometheus-sample暴露的prometheus端點,Prometheus(軟體)的預設啟動埠為9090。啟動後,同級目錄下會生成一個data目錄,實際上起到"時序資料庫"的類似作用。訪問Prometheus(軟體)的控制檯http://localhost:9090/targets:

sp-p-5

sp-p-6

Prometheus度量統計的所有監控項可以在http://localhost:9090/graph中檢視到。這裡可以觀察到HttpCount的統計,但是介面不夠炫酷,配置項也少,因此需要引入Grafana。

安裝和接入Grafana

Grafana的安裝也十分簡單,它也是開箱即用的,就是配置的時候需要熟悉它的語法。先到Grafana官網下載頁面下載一個適合系統的版本,這裡選擇Windows版本。解壓之後,直接執行bin目錄下的grafana-server.exe即可,預設的啟動埠是3000,訪問http://localhost:3000/,初始化賬號密碼是admin/admin,首次登陸需要修改密碼,接著新增一個數據源:

sp-p-7

接著新增一個新的命名為'sample'的Dashboard,新增一個Graph型別的Panel,配置其屬性:

sp-p-8

sp-p-9

A記錄(查詢命令)就是對應http://localhost:9090/graph中的查詢命令的目標:

sp-p-10

很簡單,配置完畢之後,就可以看到高大上的統計圖:

sp-p-11

這裡只是介紹了Grafana使用的冰山一角,更多配置和使用命令可以自行查閱它的官方文件。

原理和擴充套件

原理

下面是Prometheus的工作原理流程圖,來源於其官網:

sp-p-12

在SpringBoot專案中,它的工作原理如下:

sp-p-13

這就是為什麼能夠使用Metrics的靜態方法直接進行資料統計,因為Spring內部用MeterRegistryPostProcessor對Metrics內部持有的全域性的CompositeMeterRegistry進行了合成操作,也就是所有MeterRegistry型別的Bean都會新增到Metrics內部持有的靜態globalRegistry。

擴充套件

下面來個相對有生產意義的擴充套件實現,這篇文章提到SpringCloud體系的監控,我們需要擴充套件一個功能,記錄一下每個有效的請求的執行時間。新增下面幾個類或者方法:

//註解
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MethodMetric {

    String name() default "";

    String description() default "";

    String[] tags() default {};
}
//切面類
@Aspect
@Component
public class HttpMethodCostAspect {

    @Autowired
    private MeterRegistry meterRegistry;

    @Pointcut("@annotation(club.throwable.sample.aspect.MethodMetric)")
    public void pointcut() {
    }

    @Around(value = "pointcut()")
    public Object process(ProceedingJoinPoint joinPoint) throws Throwable {
        Method targetMethod = ((MethodSignature) joinPoint.getSignature()).getMethod();
        //這裡是為了拿到實現類的註解
        Method currentMethod = ClassUtils.getUserClass(joinPoint.getTarget().getClass())
                .getDeclaredMethod(targetMethod.getName(), targetMethod.getParameterTypes());
        if (currentMethod.isAnnotationPresent(MethodMetric.class)) {
            MethodMetric methodMetric = currentMethod.getAnnotation(MethodMetric.class);
            return processMetric(joinPoint, currentMethod, methodMetric);
        } else {
            return joinPoint.proceed();
        }
    }

    private Object processMetric(ProceedingJoinPoint joinPoint, Method currentMethod,
                                 MethodMetric methodMetric) throws Throwable {
        String name = methodMetric.name();
        if (!StringUtils.hasText(name)) {
            name = currentMethod.getName();
        }
        String desc = methodMetric.description();
        if (!StringUtils.hasText(desc)) {
            desc = name;
        }
        String[] tags = methodMetric.tags();
        if (tags.length == 0) {
            tags = new String[2];
            tags[0] = name;
            tags[1] = name;
        }
        Timer timer = Timer.builder(name).tags(tags)
                .description(desc)
                .register(meterRegistry);
        return timer.record(() -> {
            try {
                return joinPoint.proceed();
            } catch (Throwable throwable) {
                throw new IllegalStateException(throwable);
            }
        });
    }
}
//啟動類裡面新增方法
@SpringBootApplication
@EnableEurekaClient
@RestController
public class SampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }

    @MethodMetric
    @GetMapping(value = "/hello")
    public String hello(@RequestParam(name = "name", required = false, defaultValue = "doge") String name) {
        return String.format("%s say hello!", name);
    }
}

配置好Grafana的面板,重啟專案,多次呼叫/hello介面:

sp-p-14

後記

如果想把監控介面做得更炫酷、更直觀、更詳細,可以先熟悉一下Prometheus的查詢語法和Grafana的面板配置,此外,Grafana或者Prometheus都支援預警功能,可以接入釘釘機器人等以便及時發現問題作出預警。

參考資料:

  • https://prometheus.io/
  • https://spring.io/
  • https://github.com/percona/grafana-dashboards

本文Demo專案倉庫:https://github.com/zjcscut/spring-cloud-prometheus-sample

(本文完)

相關推薦

基於Prometheus搭建SpringCloud全方位立體監控體系

前提 最近公司在聯合運維做一套全方位監控的系統,應用叢集的技術棧是SpringCloud體系。雖然本人沒有參與具體基礎架構的研發,但是從應用引入的包和一些資料的查閱大致推算出具體的實現方案,這裡做一次推演,詳細記錄一下整個搭建過程。 Prometheus是什麼 Prometheus(普羅米修斯,官網是http

360 基於 Prometheus的在線服務監控實踐

高可用方案 通用 qss stack 語句 監控系統 參考 穩定性 counter類 轉自:https://mp.weixin.qq.com/s/lcjZzjptxrUBN1999k_rXw 主題簡介: Prometheus基礎介紹 Prometheus打點

Linux下打造全方位立體監控系統

grafana prometheus 前言本文主要介紹如何使用Grafana和Prometheus以及node_exporter對Linux服務器性能進行監控。下面兩張圖分別是兩臺服務器:服務器A服務器B概述Prometheus是一個開源的服務監控系統,它通過HTTP協議從遠程的機器收集數據並存儲在本

基於Prometheus和Grafana進行效能監控_Kubernetes中文社群

1、Prometheus介紹和架構 1.1 Prometheus介紹 Prometheus是一個開源的系統監視和警報工具包,自2012成立以來,許多公司和組織採用了Prometheus。它現在是一個獨立的開源專案,並獨立於任何公司維護。在2016年,Prometheus加入雲端計算基金會作為K

基於Prometheus和Grafana打造業務監控看板

## 前言 業務監控對許許多多的場景都是十分有意義,業務監控看板可以讓我們比較直觀的看到當前業務的實時情況,然後運營人員可以根據這些情況及時對業務進行調整操作,避免業務出現大問題。 老黃曾經遇到過一次比較尷尬的“事故”。 其中一條業務線,服務著的其中一個商家,把大部分流量切到另外一個地方去了,而我們的運

基於Prometheus閘道器的監控完整實現參考

  prometheus 是一個非常好的監控元件,尤其是其與grafana配合之後,更是如虎添翼。而prometheus的監控有兩種實現方式。1. server端主動拉取應用監控資料;2. 主動推送監控資料到prometheus閘道器。這兩種方式各有優劣,server端主動拉取實現可以讓應用專心做自己的事,根

基於 prometheus 的微服務指標監控

# 基於prometheus的微服務指標監控 服務上線後我們往往需要對服務進行監控,以便能及早發現問題並做針對性的優化,監控又可分為多種形式,比如日誌監控,呼叫鏈監控,指標監控等等。而通過指標監控能清晰的觀察出服務指標的變化趨勢,瞭解服務的執行狀態,對於保證服務穩定起著非常重要的作用 [prometheu

基於prometheus+grafana 搭建監控mysql redis mongodb等

基於prometheus+grafana 搭建監控mysql redis mongodb等先把題目定好,具體待這幾天整理我的筆記補充進來。官方網站https://prometheus.io/ 參考文檔:http://www.cnblogs.com/sfnz/p/6566951.htmlhttp://www.j

SpringCloud搭建基於Eureka服務中心的微服務體系

一、單體系統與微服務體系 在以往傳統的企業系統架構中,所有的業務介面都被集中在同個單體應用中。在業務需求不龐大的情況下,這樣的系統架構在開發、測試、部署時都還比較方便,但是隨著企業的發展,更多的業務需求也隨之而來,單體應用為了滿足這些需求就必須增加相應的業務模組,單體應用就會顯得越來越臃腫;

springboot2+exporter+prometheus+grafana搭建監控體系

com 執行 下載 reat RoCE image art ons ica 項目中需要監控系統指標(JVM,CPU,IO,MySQL等),這時候可以使用Prometheus來做。如果是需要監控日誌系統,可以使用ELK stack。監控=日誌(ELK)+指標(Promethe

基於Prometheus和Grafana的監控平臺 - 環境搭建

相關概念 微服務中的監控分根據作用領域分為三大類,Logging,Tracing,Metrics。 Logging - 用於記錄離散的事件。例如,應用程式的除錯資訊或錯誤資訊。它是我們診斷問題的依據。比如我們說的ELK就是基於Logging。 Metrics - 用於記錄可聚合的資料。例如,佇列的當前深度可

Prometheus+Grafana+Alertmanager搭建全方位監控告警系統

## prometheus安裝和配置 ### prometheus元件介紹 **1.Prometheus Server**: 用於收集和儲存時間序列資料。 **2.Client Library**: 客戶端庫,檢測應用程式程式碼,當Prometheus抓取例項的HTTP端點時,客戶端庫會將所有跟蹤的me

基於springCloud的分散式架構體系

Spring Cloud作為一套微服務治理的框架,幾乎考慮到了微服務治理的方方面面,之前也寫過一些關於Spring Cloud文章,主要偏重各元件的使用,本次分享主要解答這兩個問題:Spring Cloud在微服務的架構中都做了哪些事情?Spring Cloud

springcloud Eureka 服務註冊與消費發現(基於springboot搭建)

1.首先加入Maven依賴 1.springboot的依賴 <!--Springboot--> <dependency> <groupId>org.springframework.boot</groupId> <

運維開發實踐:基於Sentry搭建錯誤日誌監控系統

錯誤日誌監控也可稱為業務邏輯監控, 旨在對業務系統執行過程中產生的錯誤日誌進行收集歸納和監控告警。似乎有那麼點曾相識?沒錯… 就是上一篇文章提到的“APM應用效能監控”。但它又與APM不同,APM系統主要注重應用層的行為分析,收集的更多是運營方向的資料。而sentry所做的是收集應用底層程式碼的崩潰

基於Prometheus&Grafana的監控方案[2]-安裝配置

架構 這裡我們用第三方的exporter採集機器資料,prometheus直接從exporter的例項pull資料,然後用grafana展現和告警。 grafana可以選擇多個數據來源,所以機器較多時,我們可以配置多個prometheus彙集資料,再統一

基於prometheus監控k8s叢集

本文建立在你已經會安裝prometheus服務的基礎之上,如果你還不會安裝,請參考:prometheus多維度監控容器 前言 kubernetes顯然已成為各大公司親睞的容器編排工具,各種私有云公有云平臺基於它構建,那麼,我們怎麼監控叢集中的所有容器

基於Nginx搭建的smokeping監控及配置

剛接觸Linux中的smokeping監控時,什麼也不懂,百度安裝資料都不得心應手。根據多次嘗試,總結得出的成功安裝方法,很實用。相關的命令我也寫出來了,供新手學習,大神就請跳過。在此就不多做解釋什麼是smokeping了,下面來開始安裝吧。 此方法安裝的smokeping

Prometheus+ Grafana 微服務系統監控方案搭建

Prometheus是由 SoundCloud 開發的開源監控報警系統和時序列資料庫(TSDB).自2012年起,許多公司及組織已經採用 Prometheus,並且該專案有著非常活躍的開發者和使用者社群.現在已經成為一個獨立的開源專案核,並且保持獨立於任何公司,Prometheus 在2016加入 CNCF

基於Tornado搭建Raspberry Pi監控平臺

在《Tornado - 基於Python的Web伺服器框架》講到一個性能很不錯的python的web伺服器框架tornado,現在就使用它在樹莓派開發板上搭建一個簡單地監控開發板狀態網站。 這裡先給出這個小專案的檔案目錄總體結構: hardware資料夾是對開發板進行操作