質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1464閲覧

CloudWatchのdisk_used_percentが異常な値を返す

askyq

総合スコア46

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2023/03/08 00:24

編集2023/03/09 09:30

実現したいこと

  • CloudWatchのダッシュボード画面で、現在稼働中のEC2インスタンスのディスク使用率(disk_used_percent)のグラフを表示したい

前提

複数のEC2インスタンスを同時に稼働させています。
全てのインスタンスにcloudwatch-agentをインストールしています。全て、amazon-cloudwatch-agent-config-wizardを用いて、ログ設定以外すべての設定をデフォルトのまま設定しました(念のためconfig.jsonの内容も追記します)

しかしCloudWatchのダッシュポートで実際に表示されるグラフは、見た目が明らかにおかしく、また数値も実際のディスク使用率と大きくかけ離れているようです。

発生している問題・エラーメッセージ

CloudWatch画面

1週間のディスク使用率

1週間のサンプル数

御存知の通り、サーバーはjournalctlなどでログが蓄積していくはずなのですが、グラフではディスク使用量の漸増は見られません。一定のグラフに鳴るだけです。
サンプル数も確認しましたが、他のメトリクスでは5が標準になっているのに対し、こちらは75が標準になっています。
また、mem_used_percentも同時にグラフとして表示していますが、そちらの値はfreeコマンドの結果とほぼ似ており正常であると考えます。

これは1台分のデータですが、これも含めて3台分のEC2インスタンスで同様の症状が発生しています。それぞれdisk_used_percentの値は微妙に異なりますが、いずれも5559の範囲内におさまり続けています。

(追記)グラフでは50%を越えた程度になっていますが、実際の使用率は以下のとおりです。

ubuntu@ip-******:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/root 7.6G 2.9G 4.8G 38% / tmpfs 926M 0 926M 0% /dev/shm tmpfs 371M 992K 370M 1% /run tmpfs 5.0M 0 5.0M 0% /run/lock /dev/nvme0n1p15 98M 6.3M 92M 7% /boot/efi tmpfs 186M 4.0K 186M 1% /run/user/1000

該当のソースコード

{ "agent": { "metrics_collection_interval": 60, "run_as_user": "root" }, "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "", "log_group_name": ".", "log_stream_name": "{instance_id}", "retention_in_days": -1 } ] } } }, "metrics": { "aggregation_dimensions": [ [ "InstanceId" ] ], "append_dimensions": { "AutoScalingGroupName": "${aws:AutoScalingGroupName}", "ImageId": "${aws:ImageId}", "InstanceId": "${aws:InstanceId}", "InstanceType": "${aws:InstanceType}" }, "metrics_collected": { "collectd": { "metrics_aggregation_interval": 60 }, "disk": { "measurement": [ "used_percent" ], "metrics_collection_interval": 60, "resources": [ "*" ] }, "mem": { "measurement": [ "mem_used_percent" ], "metrics_collection_interval": 60 }, "statsd": { "metrics_aggregation_interval": 60, "metrics_collection_interval": 10, "service_address": ":8125" } } } }

以下にtomlファイルを示しますが、i-**********となっている部分は、当該インスタンスのIDと一致していることを確認済です。

[agent] collection_jitter = "0s" debug = false flush_interval = "1s" flush_jitter = "0s" hostname = "" interval = "60s" logfile = "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log" logtarget = "lumberjack" metric_batch_size = 1000 metric_buffer_limit = 10000 omit_hostname = false precision = "" quiet = false round_interval = false [inputs] [[inputs.disk]] fieldpass = ["used_percent"] interval = "60s" tagexclude = ["mode"] [inputs.disk.tags] metricPath = "metrics" [[inputs.logfile]] destination = "cloudwatchlogs" file_state_folder = "/opt/aws/amazon-cloudwatch-agent/logs/state" [[inputs.logfile.file_config]] file_path = "" from_beginning = true log_group_name = "." log_stream_name = "i-**********" pipe = false retention_in_days = -1 [inputs.logfile.tags] metricPath = "logs" [[inputs.mem]] fieldpass = ["used_percent"] interval = "60s" [inputs.mem.tags] metricPath = "metrics" [[inputs.socket_listener]] collectd_auth_file = "/etc/collectd/auth_file" collectd_security_level = "encrypt" collectd_typesdb = ["/usr/share/collectd/types.db"] data_format = "collectd" name_prefix = "collectd_" service_address = "udp://127.0.0.1:25826" [inputs.socket_listener.tags] "aws:AggregationInterval" = "60s" metricPath = "metrics" [[inputs.statsd]] interval = "10s" parse_data_dog_tags = true service_address = ":8125" [inputs.statsd.tags] "aws:AggregationInterval" = "60s" metricPath = "metrics" [outputs] [[outputs.cloudwatch]] force_flush_interval = "60s" namespace = "CWAgent" region = "ap-northeast-1" rollup_dimensions = [["InstanceId"]] tagexclude = ["host", "metricPath"] [outputs.cloudwatch.tagpass] metricPath = ["metrics"] [[outputs.cloudwatchlogs]] force_flush_interval = "5s" log_stream_name = "i-**********" region = "ap-northeast-1" tagexclude = ["metricPath"] [outputs.cloudwatchlogs.tagpass] metricPath = ["logs"] [processors] [[processors.ec2tagger]] ec2_instance_tag_keys = ["aws:autoscaling:groupName"] ec2_metadata_tags = ["ImageId", "InstanceId", "InstanceType"] refresh_interval_seconds = "0s" [processors.ec2tagger.tagpass] metricPath = ["metrics"]

試したこと

3台あるうちの1台において、amazon-cloudwatch-agentの再起動、ウィザード設定の再実施を行いましたが、状況は改善されませんでした。

補足情報(FW/ツールのバージョンなど)

インスタンスタイプはARM版のものを使用しています。2台はt4g系(t4g.mediunt4g.small)、1台はc6g系(c6g.medium)になります。

インスタンスのOSはすべてUbuntu 22.04です。amazon-cloudwatch-agentのインストールは、以下のサイトを読んで行いました。

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html

ダウンロードリンクはhttps://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/arm64/latest/amazon-cloudwatch-agent.debを使用しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2023/03/08 09:42

感覚的に特におかしくもないと思いますが…。 アプリケーションやらWEBサーバーやらのログでガッツリ増えているとかでなければそんなもんでは? あとそのメトリクスでわかるのは「使用量」ではなく「使用率」なので、実際のディスクのサイズがわからないとその考察が妥当なのか判断できません。 極端な話、例えばディスクがTBオーダーだったら数GB変化したとて無風です。
askyq

2023/03/08 09:51

こちらの表現に誤りがあり申し訳ありません。「使用率」であり0~100の範囲で変動することは認識していましたが、文章が間違っていました。 ディスクサイズは、3台のうち2つは`8GB`で、もう1つは`10GB`です。 グラフ画像を出したものは`8GB`のインスタンスです。 また、`df -h`の結果も追記しました。
yu_1985

2023/03/08 12:19

少なくとも自分の環境ではそうはなりませんが…。 これはCloudWatchのどこで確認しているのでしょうか。 複数のインスタンスの複数のディスクのメトリクスをまとめたものか、あるいは別のデバイスのものを表示していませんか? ダッシュボードではなく「すべてのメトリクス」からメトリクスをたどっていったらどうなりますか。
askyq

2023/03/08 12:26

CloudWatchの左側メニュー「すべてのメトリクス」からTokyoリージョンの「すべて>CWAgent>InstanceId」の順にたどり、当該インスタンスのdisk_used_percentを表示しましたが、画像と同じグラフでした。 この投稿にあげていた画像はCloudWatchのダッシュボードの「エクスプローラー」から、当該インスタンスのNameタグで絞り込んだものになります。
yu_1985

2023/03/08 13:57

インスタンスだけでなく、ディスク内のファイルシステム等でも絞り込めませんか?
askyq

2023/03/08 14:12

すべて>CWAgent の配下には以下の3つがあります。 ・(1)ImageId,InstanceId,InstanceType,device,fstype,path(51件) ・(2)ImageId,InstanceId,InstanceType(3件) ・(3)InstanceId(6件) (3)は上のコメントでも紹介しましたが、3台のインスタンスのmem_used_percent、disk_used_percentがあります。 (2)はmem_used_percentしかありません。 (1)は1つのインスタンスにつき17件あり、それぞれdevice、fstypeが異なります。 試しに「device=nvme0n1p1」「fstype=ext4」のものを確認したところ、期待していたグラフが表示されました。 見るところを間違えていたようで、たいへんお騒がせしました。アドバイスくださりありがとうございます。
guest

回答1

0

自己解決

質問へのコメントで yu_1985 様にご指摘いただいた通り、disk_used_percentは全てのファイルシステムについて情報を送信していました。
私のダッシュボードの設定では、全てのファイルシステムの数値が全部まとめられて、サンプル数が75となってしまっていました。

ただ今回は、これだけ多くのファイルシステムの情報はいらないし、CloudWatchで課金が発生している状況でもあります。なのでconfig.jsonの以下を修正することで対処しました。
下記は抜粋ですが、disk.resources*から/に変更しています。

config.json(抜粋)

1 "disk": { 2 "measurement": [ 3 "used_percent" 4 ], 5 "metrics_collection_interval": 60, 6 "resources": [ 7 "/" 8 ] 9 },

これで目当てのマウントポイント以外のデータは送られてこなくなり、ダッシュボード上のグラフもサンプル数が5となり形状・数値も想定通りになりました。

yu_1985 様、改めてありがとうございました。

投稿2023/03/09 00:30

askyq

総合スコア46

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問