近期项目需要引入监控系统,一番折腾后搭建成功。这里总结一下搭建的过程。本文旨在引导整合并打通整个监控系统各个环节,适合新手及需求急切的开发者快速搭建监控系统的基础。
官网:micrometer
micrometer号称监控界的SLF4J,主要用来以极低极低的消耗来给Java程序提供对指标的监控。
micrometer支持接入多种数据库,这里我使用的是prometheus。
maven项目:
io.micrometer
micrometer-registry-prometheus
${micrometer.version}
gradle项目:
compile 'io.micrometer:micrometer-registry-prometheus:latest.release'
注册表是用来管理一系列指标的工具,尤其在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();
}
}
}
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的累积值
Prometheus官网下载传送门:Prometheus下载,下载后解压即可完成安装。
在解压目录中找到并配置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会自动去配置的目标中抓取信息。
在Prometheus的解压目录中运行prometheus,即可启动程序。Prometheus的默认运行端口是9090,如果是在本机安装,可以在浏览器输入localhost:9090打开Prometheus的界面:
在graph界面中(图示界面),可以在Expression中输入函数和指标进行查询;也可以在Status中查看相关配置。
grafana的安装同样非常简单,官方针对不同操作系统的安装都要非常详细的安装步骤,戳grafana安装。我的是Mac系统,在官网安装教程的下面能找到启动方法。启动grafana。
grafana的默认运行端口是3000,在浏览器输入localhost:3000,默认初始账号密码是admin/admin,进入grafana界面。
首先点击左边的齿轮,配置数据源:Configuration --> Data Sources --> add data source --> prometheus,在里面添加url。这里我添加的是本地的prometheus数据源:
点击左上角的加号,创建新的Dashboard,在新的Dashboard中可以去创建各种图标。这里选择Graph。Graph是目前唯一一个支持告警的图表。
上面是新创建的graph。点击图表标题会出现功能菜单,选择edit,进入编辑界面,就是grafana强大的编辑界面:
在编辑界面中,分别可以对图表UI、对指标、对坐标刻度等等信息进行编辑,还能在Alert中设置指标告警,告警还可以邮件推送或者推送到钉钉群。上述界面是设置显示的指标,因为前面设置的数据源是prometheus,所以这里可以使用prometheus的查询语法设置指标。例如这里查询了post_request_number指标的汇总值。
当然,如果对图表显示的时长不满意,还可以点击右上角的返回按钮回到Dashboard界面,在右上角设置显示时间。
这样,整个监控系统的各个环节,就已经打通了。