Azure Container Instances でPrometheus の Docker Image を展開して簡易監視環境を作る。

はじめに

くどうです。

今回はAzure Container Instances を利用してPrometheus 環境を構築する方法を説明していきます。
Container Instance 上で展開するメリットは一時的に展開して監視を行う場合です。
Containerを展開するのみなので、VMを立ち上げるより安易です。
あと、IaaSではないのでメンテナンスのさほどかからないですが費用面ではたぶん割高になると思います。
・・・Serverlessっぽくもありますね(白目

リクエスト
・DockerHubのアカウント
・Docker Imageを編集できる環境(ローカル、VMなど)

構成図は以下です。

・DockerHub
・Azure Container Instances
・VM(監視対象)

注意事項はセキュリティです。
上記の手法ではIP:9100とIP:9090はフルオープンです。

監視対象

監視対象となるVM(ex:ubuntu)を立ち上げます。
node-exporterをインストールします。

$ sudo apt-get install prometheus-node-exporter

受信ポートに9100をanyで開けます。

グローバルIPを確認しておきます。
準備完了です。

Prometheus Container Imageを作成

Prometheus のContainer imageを作成します。

Prometheus のDocker ImageをBuildしようとすると下記のエラーが発生しました。

COPY failed: stat /var/lib/docker/tmp/docker-builder980145409/prometheus: no such file or directory

そこで、一度RunしてConfigを編集してCommitしてImageを作成しています。

$ sudo docker run prom/prometheus
$ sudo docker exec -it {コンテナID} sh

編集ファイル
/etc/prometheus/prometheus.yml

targetsに監視対象(グルーバルIP:9100)を追記します。

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
      # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

H3見出しa

# 下記に対象を追記します。 static_configs: - targets: ['localhost:9090' ,'52.191.xxx.xxx:9100']

対象をConfigに書き込んだらImageを取得しまします。

$ sudo docker commit {コンテナID} {image名(Dockerhubレポジトリと同じ名前)}

DockerHubにUploadします。
(事前に $sudo docker login が必要)

$ sudo docker push {image名}

以上で準備完了です。
次は、Container Instanceを展開します。

Container imageをAzure Container Instancesに展開

ポータルから展開します。
DockerHubのレポジトリを指定します。

ポートは9090を指定します。

以上で完了です。
しばらくするとアクセス出来るようになります。

IPアドレス:9090にアクセスします。

しばらくするとグラフが確認できると思います。

まとめ

Container InstancesはDockerで利用できるものなら基本利用できるかと思います。
簡易環境の構築などにも利用できるのではないでしょうか。

再度書きますが注意事項はセキュリティです。
上記の手法ではIP:9100とIP:9090はフルオープンです。