IK.AM


Observability > Prometheus

Prometheusをubuntu上にインストールしremote writeを受け付けるメモ

Created on Wed Jan 24 2024 • Last Updated on Thu Jan 25 2024N/A Views

🏷️ Prometheus | Ubuntu | Vultr

PrometheusのManaged Serviceはコスパが悪いので、Self Hostすることにする。監視対象のKubernetes上にPrometheusを置きたくないので、PrometheusはUbuntu VMで運用する。
Kubernetesのクラスタからはremote writeでこのSelf HostのPrometheusにメトリクスを送信する。

Prometheusをubuntu上にインストールする。Vultr上で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 <<EOF
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
[req_distinguished_name]
countryName_default = JP
stateOrProvinceName_default = Tokyo
localityName_default = Minato
organizationalUnitName_default = IK.AM
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.${ROOT_DOMAIN}
EOF
fi

openssl genrsa -out ${ROOT_DOMAIN}.key 2048
openssl req -new -out ${ROOT_DOMAIN}.csr -subj "/CN=*.${ROOT_DOMAIN}/O=IK.AM/C=JP" -key ${ROOT_DOMAIN}.key -config ${SSL_FILE}
openssl req -text -noout -in ${ROOT_DOMAIN}.csr
openssl x509 -req -days 3650 -in ${ROOT_DOMAIN}.csr -signkey ${ROOT_DOMAIN}.key -out ${ROOT_DOMAIN}.crt -extensions v3_req -extfile ${SSL_FILE}
openssl x509 -in ${ROOT_DOMAIN}.crt -text -noout
rm ${ROOT_DOMAIN}.csr
EOC

chmod +x ./gen_tls_certs.sh
./gen_tls_certs.sh sslip.io

sudo mv sslip.io.crt /etc/prometheus/tls.crt
sudo mv sslip.io.key /etc/prometheus/tls.key
sudo chown prometheus:prometheus /etc/prometheus/tls.*

scrape_configsを修正

scrape_configs:
- job_name: "prometheus"
  static_configs:
  - targets: ["localhost:9090"]
  scheme: https
  tls_config:
    insecure_skip_verify: true
  basic_auth:
    username: admin
    password: "**************"

systmctlで起動するための設定ファイル作成

cat <<'EOF' > /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 \
    --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を追加

- job_name: node-exporter
  static_configs:
  - targets:
    - localhost:9100

prometheusをリスタート

sudo systemctl restart prometheus
image

このPrometheusにRemote Writeしたい時は

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
Found a mistake? Update the entry.