2021年4月16日追記:この記事は、Prometheus サーバーでの AWS Signature Version 4 サポート によって導入された変更を反映するように更新されました。
先日、Prometheus メトリクスの取り込み、クエリ、保存を行うフルマネージドでセキュアな Prometheus 互換環境を作成できるAmazon Managed Service for Prometheus (AMP) を発表しました。AWS Management & Governance の以前のブログ記事で、コンテナ化された環境を監視するためにAMPをセットアップする方法を説明しました。いくつかのクリティカルなユースケースでは、コンテナ化はずっと先のことだったり、時には不可能な場合があります。 この記事では、Amazon Elastic Compute Cloud (Amazon EC2) またはオンプレミス環境で稼働しているシステムでどのように AMP を使うのかを説明します。
この例では、以下のステップで説明します。
対応するアーキテクチャは、次のように視覚化することができます。
今回の例では、Ireland (eu-west-1) リージョンを選択しています。サービス別でサポートされている AWS リージョンを確認するには、AWS リージョンサービスリスト をご覧ください。
このウォークスルーの最初のステップは、 EC2 インスタンスをセットアップすることです。そのインスタンスでアプリケーションをホストし、後で作成する AMP ワークスペースにそのメトリクスを転送します。インスタンスにはIAMロールを使用することをお勧めします。このロールには、ポリシーAmazonPrometheusRemoteWriteAccess
をアタッチして、インスタンスに最低限のアクセス許可を与えることができます。
インスタンスが設定されたら、インスタンスにログインしてサンプルアプリケーションを実行できます。main.go
という名前のファイルを作成し、以下に示す内容を追加してください。HTTP 経由でいくつかのシステムメトリックを自動的に公開するために Prometheus http ハンドラを使用してください。Prometheus クライアントライブラリを使用して、独自のメトリクスを実装することができます。
package mainimport ( "github.com/prometheus/client_golang/prometheus/promhttp" "net/http")func main() { http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8000", nil)}
サンプルアプリケーションを実行する前に、すべての依存関係がインストールされていることを確認しましょう。
sudo yum update -ysudo yum install -y golanggo get github.com/prometheus/client_golang/prometheus/promhttpgo run main.go
アプリケーションは、ポート8000
で稼働している必要があります。この段階で、アプリケーションによって公開されるすべての Prometheus メトリクスを確認できるはずです。
curl -s http://localhost:8000/metrics ...process_max_fds 4096# HELP process_open_fds Number of open file descriptors.# TYPE process_open_fds gaugeprocess_open_fds 10# HELP process_resident_memory_bytes Resident memory size in bytes.# TYPE process_resident_memory_bytes gaugeprocess_resident_memory_bytes 1.0657792e+07# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.# TYPE process_start_time_seconds gaugeprocess_start_time_seconds 1.61131955899e+09# HELP process_virtual_memory_bytes Virtual memory size in bytes.# TYPE process_virtual_memory_bytes gaugeprocess_virtual_memory_bytes 7.77281536e+08# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.# TYPE process_virtual_memory_max_bytes gaugeprocess_virtual_memory_max_bytes -1# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.# TYPE promhttp_metric_handler_requests_in_flight gaugepromhttp_metric_handler_requests_in_flight 1# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.# TYPE promhttp_metric_handler_requests_total counterpromhttp_metric_handler_requests_total{code="200"} 1promhttp_metric_handler_requests_total{code="500"} 0promhttp_metric_handler_requests_total{code="503"} 0
ワークスペースを作成するには、AWS コンソールで AMP にアクセスし、ワークスペースの名前を入力します。
作成後、AMP によってremote write 用の URL とクエリ用の URL が提供されます。
expression browser を含む Prometheus の最新安定版をインストールするには、 Prometheus Guide を参照してください。この例では、次のように Amazon Linux に Prometheus v2.26.0 をインストールします。
prometheus.yaml
という名前の新しいファイルを作成し、remote_write
の設定を AWS コンソールの AMP ワークスペースにあるワークスペース IDで書き換えてください。(訳注: 以下の内容でprometheus.yamlを作成し、 をAMPワークスペースのIDに置き換えてください)
global:scrape_interval: 15sexternal_labels: monitor: 'prometheus'scrape_configs:- job_name: 'prometheus' static_configs:- targets: ['localhost:8000']remote_write:- url: https://aps-workspaces.eu-west-1.amazonaws.com/workspaces//api/v1/remote_write queue_config:max_samples_per_send: 1000max_shards: 200capacity: 2500 sigv4:region: eu-west-1
Prometheus を実行し、アプリケーションメトリクスを AMP に送信する準備がようやく整いました。
prometheus --config.file=prometheus.yaml
メトリクスが AMP に送られるようになりました! Prometheus サーバーのコンソールに出力が表示されるはずです。
Grafana は、 Prometheus のメトリクスを可視化するためによく使われているプラットフォームです。ローカルマシン で、 Grafana をインストール (訳注: Grafana 7.3.5、またはそれより新しい必要があります)し、AMP ワークスペースをデータソースとして設定しましょう。 ローカル環境に、ワークスペースをクエリするための次の権限またはそれ以上の権限があることを確認してください。(訳注: 必要な権限を利用可能な Access Key ID および Secret Access Key をローカル環境にご用意ください)
{ "Version": "2012-10-17", "Statement": [{"Action": [ "aps:GetLabels", "aps:GetMetricMetadata", "aps:GetSeries", "aps:QueryMetrics", "aps:DescribeWorkspace"],"Effect": "Allow","Resource": "*"} ]}
IAM の権限で AMP へのクエリに署名するため、Grafana を実行する前に AWS Sigv4 認証を有効にします。
export AWS_SDK_LOAD_CONFIG=trueexport GF_AUTH_SIGV4_AUTH_ENABLED=truegrafana-server --config=/usr/local/etc/grafana/grafana.ini \--homepath /usr/local/share/grafana \cfg:default.paths.logs=/usr/local/var/log/grafana \cfg:default.paths.data=/usr/local/var/lib/grafana \cfg:default.paths.plugins=/usr/local/var/lib/grafana/plugin
Grafana にログインし、データソース設定ページ /datasources に移動して AMP ワークスペースをデータソースとして追加します。URL は末尾に/api/v1/query
をつけないようにしてください。Sigv4 auth
を有効にして、適切なリージョンを選択して保存してください(訳注:SigV4 Auth Details
のAuthentication Provider
でクレデンシャル情報の設定もしてください)。
これで、アプリケーションメトリクスが利用できるようになりました。例えば、メトリクスブラウザでscrape_duration_seconds{}
を設定してみてください。以下のような画面が表示されるはずです。
この記事では、最近発表された Amazon Managed Service for Prometheus を使って、Amazon EC2 インスタンスを使った非コンテナ化環境でのメトリクス収集のアーキテクチャのセットアップを詳しく説明しました。EC2 インスタンス上でメトリクスの収集を自動化するために、関連するすべての依存関係を持つ AMI を事前設定するか、AWS Systems Manager を使うことができます。 Amazon Managed Service for Prometheus、 Amazon Managed Service for Grafana、そして OpenTelemetry についてはリンク先をご参照ください。
Rodrigue は Amazon Web Services のソリューションアーキテクトです。彼は分散システム、オブザーバビリティ、機械学習に情熱を傾けています。DevOpsとソフトウェア開発の経験が豊富で、Go言語でのプログラミングが好きです。Twitter ID は @bonclay7 です。
翻訳はソリューションアーキテクトの 藤嶋 が担当しました。原文はこちらです。本記事は翻訳にあたり、一部の画面キャプチャを翻訳時点の最新版に差し替えており、一部記述を追加しています。
ナビゲーションリスト
セットアップ Amazon EC2 のセットアップ デモアプリケーション AMP ワークスペースを作成する Prometheus サーバーを実行する Grafana でメトリクスを可視化する まとめカテゴリー
関連記事
ホット記事