Prometheus始めてみる

以下のVagrantファイルでイメージを作ります。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure("2") do |config|

  config.vm.box = "centos/8"
  # https://github.com/dotless-de/vagrant-vbguest/issues/367
  config.vm.box_url = "http://cloud.centos.org/centos/8/x86_64/images/CentOS-8-Vagrant-8.1.1911-20200113.3.x86_64.vagrant-virtualbox.box"

  config.vm.network "private_network", ip: "192.168.33.30"

  config.vm.provision "shell", inline: <<-SHELL
    mv /etc/localtime /etc/localtime.bak
    ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
    sed -i "/SELINUX/s/enforcing/disabled/g" /etc/selinux/config

    yum install -y java-11-openjdk
  SHELL


  # config.vm.synced_folder "/Users/tak/Documents/program/vagrant/prometheus_vagrant", "/mnt/shared"
end

イメージが出来たらこちらの記事を参考にPrometheusをインストールします。

CentOS8にPrometheusをインストールする

インストールに成功すると以下のURLで状況が見れるようになります。

http://192.168.33.30:9090/graph

次に下のJavaがExporterになります。メモリの状況を通知するプロセスです。

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpServer;

import java.io.IOException;
import java.net.InetSocketAddress;

public class ExporterTest1 {
    private static final int EXPOSE_PORT = 9092;
    public static void main(String[] args) throws IOException {
        var server = HttpServer.create(new InetSocketAddress(EXPOSE_PORT), 0);
        var context = server.createContext("/");
        context.setHandler(ExporterTest1::handleRequest);
        System.out.println("started at " + EXPOSE_PORT);
        server.start();
    }

    private static void handleRequest(HttpExchange exchange) throws IOException {
        var body = "";
        Runtime runtime = Runtime.getRuntime();
        body += "java_runtime_free_memory\t" + runtime.freeMemory() + "\n";
        var response = body.getBytes();
        exchange.sendResponseHeaders(200, response.length);
        var output = exchange.getResponseBody();
        output.write(response);
        output.close();
    }
}

次は設定ファイルを変更します。

$ sudo vi /usr/prometheus/prometheus.yml

+  - job_name: 'exporter_test'
+    static_configs:
+    - targets: ['localhost:9092']

$ sudo systemctl restart prometheus

Prometheusの上部から Status->Targetをみると

f:id:taku-woohar:20200430220158p:plain
exportの表示
この様に認識されました。 TOPに戻って java_runtime_free_memory -> execute -> grapthでグラフが表示されればOKです。
f:id:taku-woohar:20200430220325p:plain
グラフ