近期项目需要引入监控系统,一番折腾后搭建成功。这里总结一下搭建的过程。本文旨在引导整合并打通整个监控系统各个环节,适合新手及需求急切的开发者快速搭建监控系统的基础。

1、MicroMeter

    官网:micrometer

    micrometer号称监控界的SLF4J,主要用来以极低极低的消耗来给Java程序提供对指标的监控。

    micrometer支持接入多种数据库,这里我使用的是prometheus。

1、引入jar包:

    maven项目:

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

    gradle项目:

compile 'io.micrometer:micrometer-registry-prometheus:latest.release'

2、使用注册表

    注册表是用来管理一系列指标的工具,尤其在micrometer-prometheus的项目,PrometheusMeterRegistry的scrape()方法已经封装好了生成给prometheus传递的信息的代码,我们只需要在servlet中调用该方法响应prometheus的抓取即可。

    1)定义注册表:为了方便管理,将注册表封装到一个类里面统一管理。

public class PrometheusMeterManager {

  private static PrometheusMeterRegistry registry = null;

  public static void init() {
    registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
  }

  public static PrometheusMeterRegistry register() {
    if (registry == null) {
      init();
    }
    return registry;
  }
}

    2)向Prometheus反馈注册表的内容:在servlet中调用注册表的scrape()方法作为返回结果,prometheus会去配置的 {服务地址、端口、路径} 组合下获取指标信息。如下是servlet的示例:

public class PrometheusMeterServlet extends HttpServlet {

  @Override
  public void doGet(HttpServletRequest httpRequest, HttpServletResponse httpResponse) {
    PrometheusMeterRegistry registry = PrometheusMeterManager.register();
    String meterResponse = registry.scrape();
    try {
      httpResponse.getWriter().print(meterResponse);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

3、添加监控指标

    micrometer的指标包括counter、gauge、timer和distribution summaries这4种。这里以counter为例:

    1)根据注册表获取counter的实例。

MeterRegistry registry = PrometheusMeterManager.register();
Counter counter = registry.counter("post_request_number");

    2)调用counter的方法达到预期目的:

    Counter定义了4个方法:

increment():counter计数加1;
increment(double amount):计数加amount;
count():counter的累积值;
measure():counter的累积值

2、Prometheus

1、安装

    Prometheus官网下载传送门:Prometheus下载,下载后解压即可完成安装。

2、配置

    在解压目录中找到并配置prometheus.yml:

global:
  scrape_interval:     15s 
  evaluation_interval: 15s 
alerting:
  alertmanagers:
  - static_configs:
    - targets:
'evaluation_interval'.
rule_files:

scrape_configs:
  - job_name: 'prometheus'
    metrics_path: /prometheus
    static_configs:
     - targets: ['localhost:9000']

    一般来说,我们只需要配置scrape_configs下的抓取目标。示例中的是对特定url的配置,还可以通过consul实现对集群的配置。Prometheus会自动去配置的目标中抓取信息。

3、运行

    在Prometheus的解压目录中运行prometheus,即可启动程序。Prometheus的默认运行端口是9090,如果是在本机安装,可以在浏览器输入localhost:9090打开Prometheus的界面:

prometheus监控本地redis prometheus监控java_prometheus监控本地redis

    在graph界面中(图示界面),可以在Expression中输入函数和指标进行查询;也可以在Status中查看相关配置。

3、grafana

1、安装运行

    grafana的安装同样非常简单,官方针对不同操作系统的安装都要非常详细的安装步骤,戳grafana安装。我的是Mac系统,在官网安装教程的下面能找到启动方法。启动grafana。

    grafana的默认运行端口是3000,在浏览器输入localhost:3000,默认初始账号密码是admin/admin,进入grafana界面。

prometheus监控本地redis prometheus监控java_prometheus监控本地redis_02

2、添加数据源

    首先点击左边的齿轮,配置数据源:Configuration --> Data Sources --> add data source --> prometheus,在里面添加url。这里我添加的是本地的prometheus数据源:

prometheus监控本地redis prometheus监控java_micrometer_03

3、创建Dashboard

    点击左上角的加号,创建新的Dashboard,在新的Dashboard中可以去创建各种图标。这里选择Graph。Graph是目前唯一一个支持告警的图表。

prometheus监控本地redis prometheus监控java_micrometer_04

    上面是新创建的graph。点击图表标题会出现功能菜单,选择edit,进入编辑界面,就是grafana强大的编辑界面:

prometheus监控本地redis prometheus监控java_prometheus_05

    在编辑界面中,分别可以对图表UI、对指标、对坐标刻度等等信息进行编辑,还能在Alert中设置指标告警,告警还可以邮件推送或者推送到钉钉群。上述界面是设置显示的指标,因为前面设置的数据源是prometheus,所以这里可以使用prometheus的查询语法设置指标。例如这里查询了post_request_number指标的汇总值。

    当然,如果对图表显示的时长不满意,还可以点击右上角的返回按钮回到Dashboard界面,在右上角设置显示时间。

prometheus监控本地redis prometheus监控java_grafana_06

    这样,整个监控系统的各个环节,就已经打通了。