以下の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をインストールします。
インストールに成功すると以下の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をみると