--- title: Prometheusをubuntu上にインストールしremote writeを受け付けるメモ tags: ["Prometheus", "Ubuntu", "Vultr"] categories: ["Observability", "Prometheus"] date: 2024-01-24T12:34:59Z updated: 2024-07-25T04:00:49Z --- PrometheusのManaged Serviceはコスパが悪いので、Self Hostすることにする。監視対象のKubernetes上にPrometheusを置きたくないので、PrometheusはUbuntu VMで運用する。 Kubernetesのクラスタからはremote writeでこのSelf HostのPrometheusにメトリクスを送信する。 Prometheusをubuntu上にインストールする。[Vultr](https://vultr.com)上でVMを作成する。1 vCPU、1GB RAMのインスタンスなら$5から始められる。 image image image image image image image image image sshでアクセス ``` ssh root@41.65.21.12 ``` neofecthしてみる。 ``` sudo apt-get update sudo apt-get install neofetch -y ``` prometheusユーザー作成 ``` sudo groupadd --system prometheus sudo useradd -s /sbin/nologin --system -g prometheus prometheus ``` apt-getでもPrometheusはインストールできるが、最新版を使いたかったのでバイナリをダウンロードする。 Prometheusのダウンロードと配置 ``` cd /tmp wget https://github.com/prometheus/prometheus/releases/download/v2.49.1/prometheus-2.49.1.linux-amd64.tar.gz tar xzvf prometheus*.tar.gz cd prometheus*/ sudo mkdir /etc/prometheus sudo mkdir /var/lib/prometheus sudo mv prometheus /usr/local/bin sudo mv promtool /usr/local/bin sudo chown prometheus:prometheus /usr/local/bin/prometheus sudo chown prometheus:prometheus /usr/local/bin/promtool ``` ``` sudo mv consoles /etc/prometheus sudo mv console_libraries /etc/prometheus sudo mv prometheus.yml /etc/prometheus sudo chown prometheus:prometheus /etc/prometheus sudo chown -R prometheus:prometheus /etc/prometheus/consoles sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries sudo chown -R prometheus:prometheus /var/lib/prometheus ``` Basic認証を設定する ``` htpasswd -nB admin ``` ``` cat <<'EOF' > /etc/prometheus/web.yml tls_server_config: cert_file: tls.crt key_file: tls.key basic_auth_users: admin: $2y$05$**************************** EOF ``` 自己署名TLS証明書を作成する ``` cd /tmp cat <<'EOC' > gen_tls_certs.sh #!/bin/bash set -e ROOT_DOMAIN=$1 SSL_FILE=sslconf-${ROOT_DOMAIN}.conf #Generate SSL Config with SANs if [ ! -f $SSL_FILE ]; then cat > $SSL_FILE < /etc/systemd/system/prometheus.service [Unit] Description=Prometheus Wants=network-online.target After=network-online.target [Service] User=prometheus Group=prometheus Type=simple ExecStart=/usr/local/bin/prometheus \ --config.file /etc/prometheus/prometheus.yml \ --web.config.file=/etc/prometheus/web.yml \ --storage.tsdb.path=/var/lib/prometheus/ \ --storage.tsdb.retention.time=42d \ --storage.tsdb.retention.size=15GB \ --web.console.templates=/etc/prometheus/consoles \ --web.console.libraries=/etc/prometheus/console_libraries \ --web.enable-lifecycle \ --enable-feature=exemplar-storage \ --enable-feature=otlp-write-receiver \ --web.enable-remote-write-receiver [Install] WantedBy=multi-user.target EOF ``` ``` sudo systemctl daemon-reload sudo systemctl enable prometheus sudo systemctl start prometheus ``` ``` sudo systemctl status prometheus ``` ``` sudo ufw allow 9090/tcp ``` `https://41-65-21-12.sslip.io:9090`にアクセス image image Node Exporterをインストール。こっちは最新版じゃなくてもいいのでapt-getでインストール。 ``` sudo apt-get install prometheus-node-exporter -y ``` scrape_configsを追加 ```yaml - job_name: node-exporter static_configs: - targets: - localhost:9100 ``` prometheusをリスタート ``` sudo systemctl restart prometheus ``` image このPrometheusにRemote Writeしたい時は ```yaml remote_write: - url: https://41-65-21-12.sslip.io:9090/api/v1/write remote_timeout: 30s send_exemplars: true basic_auth: username: admin password: "**************" tls_config: insecure_skip_verify: true ```