Tag: CloudWatch

CloudWatch logsのログをinsightで検索

ログについては、ひとまずCloudWatch logsに投げ込む運用にしています(注1

このCloudWatch logsを高速に検索できるインサイトをCLIから使う紹介です( WEBでの使い方については[ CloudWatch ]->[ インサイト ]でいろいろ試していただきたいです ) 障害調査の場合、どのみちgrepすることになるのでCLIでの手順も残しておきます。

ログ取得

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatchLogs/latest/APIReference/API_StartQuery.html

--start-time 開始時刻をunixtime
--end-time 終了時刻をunixtime
--query-string 参考 https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html

クエリ(フィルタリング)について

検索する際の方法 limit 10 とか。

このためにインサイトを使っていると言えますが正規表現

| filter @message like /access_token=/

クエリ例

参考: サンプルクエリ - Amazon CloudWatch Logs

nginxのログのみを表示する

| filter @logStream LIKE /nginx/

ロードバランサからのヘルスチェックを除外する

| filter @message NOT LIKE /ua:ELB-HealthChecker/

ステータスコードが500番台のもののみを表示する

| filter @message LIKE /status:5\d+/

ログをパースして変数にセットする

| parse @message "time:*host:*forwardedfor:*req:*status:*size:*referer:*ua:*reqtime:*cache:*runtime:*vhost:*userid:*" as time, host, forwardedfor, req, status, size, referer, ua, reqtime, cache, runtime, vhost, userid

クエリ実行( ログ検索は時間がかかるため、後で別途getする必要があります)

bash環境(dateコマンドはbrewのcoreutilsを使用)

Read more...

MediaLiveをCloudWatchで監視する

背景

MediaLive ですが、いろいろなエラーを通知してくれます。

やれ「RTMP 接続が切れたよ」とか「オーディオ入力 or ビデオ入力が無いよ」とかですね。 通常、ライブ配信が始まる前は当然、MediaLive への入力は無いはずなので、通知は構わないのですが、 ライブ配信中に出ると、それはもうトラブルシューティングの情報の一つとして重要なものになります。 ( というか当初、エラーは出てるっぽいし、挙動はおかしいんだけど、どんなエラーが出てるか分からないケースがあって窮地な時がありました )

今は管理画面の[ channels ]->[ 目的のチャンネル ]->[ Alerts ]から確認できます。が、ログとして残しておくのは良い事だと思います。 このエラー出力のフォーマットは決まっている訳ではなく、たまに変わります。ので 『あー、エラー出力が変わったからアラートが上がらなくなったのね』、という事がログを残しておくと分かります。

手順

WebUI

SNS トピック作成

  • SNS のページ( https://ap-northeast-1.console.aws.amazon.com/sns/ )を開く

  • [ トピック ]->[ 新しいトピックの作成 ]->トピック名の入力、私は[ MediaLiveEvent ]、表示名[ MediaLiveEvent ]と入れてみた

  • 作成したトピックの ARN をコピペ arn:aws:sns:ap-northeast-1:123456789012:MediaLiveEvent

  • 同じ SNS 内の左側メニュー->[ サブスクリプションの作成 ]

  • [ トピック ARN ]に先程作成した MediaLive のトピックの ARN を入力

  • プロトコル メール(ほかにも lambda とかから Slack に送信できたりする)

  • エンドポイント : 自分のメールアドレス

はじめてのアラートメール設定の場合、AWS から確認のメールが飛ぶ

  • [ AWS Notification - Subscription Confirmation ]という件名のメールがあったらメール本文内のリンクをクリック

CloudWatch

  • cloudwatch のページに移動*
  • [ イベント ]->[ ルールの作成 ]
  • [ イベントパターン ]になってること
  • [ カスタムイベントパターン ]に変更 カスタムイベントパターンの内容としては下記を入力
{
  "source": [
    "aws.medialive"
  ]
}
  • 右側の[ ターゲットの追加 ]->[ SNS トピック ]に変更->[ トピック ]はプルダウンメニューから先程、作成した SNS のトピックを選択
  • [ 設定の詳細 ]
  • ルールの定義
  • 名前: 任意
  • 説明: 任意
  • [ ルールの作成 ]
  • メールボックスを確認

CLI

参考: SNS をコマンドラインから設定する : 電子の密林を開拓する

Read more...

ローカルサーバからCloudWatchに送信してアラートを設定する

CloudWatchのアラートを設定する方法

ここでは各環境向けにCPUとメモリ使用率のアラートを設定する方法を共有します。以下で説明する alarms.shalarm_mem_template.jsonalarm_cpu_template.json の3つのファイルを用いて作業します。

alarms.sh

各ECSサービスのアラームの設定をするShell Scriptです。 alarms.shの名前で以下の内容のファイルを作成します。 このスクリプトでは現在作成されている環境を全て取得し、そのそれぞれに対して、すでに同名のアラームがある場合には更新、 存在しない場合には新規にアラームを作成します。 そのため新しい環境を追加し、CPUおよびメモリ使用率のアラートを設定したい度に実行する必要があります。

#!/bin/bash
services=$(aws ecs list-services --cluster=test-dev-20181030-1 | jq -r .serviceArns[] | sed  s#.*/##g)
THRESHOLD_MEM=70
THRESHOLD_CPU=70

for service in ${services[@]}; do
  SERVICE=$service THRESHOLD_MEM=$THRESHOLD_MEM envsubst < ./alarm_mem_template.json > alarm_mem.json
  SERVICE=$service THRESHOLD_CPU=$THRESHOLD_CPU envsubst < ./alarm_cpu_template.json > alarm_cpu.json
  aws cloudwatch put-metric-alarm --cli-input-json file://alarm_mem.json
  aws cloudwatch put-metric-alarm --cli-input-json file://alarm_cpu.json
done

使い方

alarms.sh を作成したディレクトリに alarm_mem_template.jsonalarm_cpu_template.json をそれぞれ以下の内容で作成します。

alarm_mem_template.json

{
  "EvaluationPeriods": 3,
  "TreatMissingData": "missing",
  "ComparisonOperator": "GreaterThanThreshold",
  "ActionsEnabled": true,
  "AlarmActions": [
    "arn:aws:sns:ap-northeast-1:123456789012:alert2Slack"
  ],
  "OKActions": [
    "arn:aws:sns:ap-northeast-1:123456789012:alert2Slack"
  ],
  "Namespace": "AWS/ECS",
  "Period": 60,
  "Threshold": ${THRESHOLD_MEM},
  "AlarmName": "Memory Utilization of ${SERVICE} alert to Slack",
  "Dimensions": [
    {
      "Name": "ClusterName",
      "Value": "test-dev-20181030-1"
    },
    {
      "Name": "ServiceName",
      "Value": "${SERVICE}"
    }
  ],
  "DatapointsToAlarm": 3,
  "Statistic": "Average",
  "MetricName": "MemoryUtilization"
}

alarm_cpu_template.json

{
  "EvaluationPeriods": 3,
  "TreatMissingData": "missing",
  "ComparisonOperator": "GreaterThanThreshold",
  "ActionsEnabled": true,
  "AlarmActions": [
    "arn:aws:sns:ap-northeast-1:123456789012:alert2Slack"
  ],
  "OKActions": [
    "arn:aws:sns:ap-northeast-1:123456789012:alert2Slack"
  ],
  "Namespace": "AWS/ECS",
  "Period": 60,
  "Threshold": ${THRESHOLD_CPU},
  "AlarmName": "CPU Utilization of ${SERVICE} alert to Slack",
  "Dimensions": [
    {
      "Name": "ClusterName",
      "Value": "test-dev-20181030-1"
    },
    {
      "Name": "ServiceName",
      "Value": "${SERVICE}"
    }
  ],
  "DatapointsToAlarm": 3,
  "Statistic": "Average",
  "MetricName": "CPUUtilization"
}

上記2つのファイルがある状態で $ ./alarms.sh を実行すると、各環境のCPU、メモリの使用率のアラートが設定することができます。

Read more...

cheatsheet/aws/cloudwatch

ログストリームをまたいで検索

下記を参照 [新機能]CloudWatch Logs がアップデート、ログストリームをまたいで検索できるように! | Developers.IO

更に時間を指定する場合、–start-time と –end-time をつけると絞り込みができる。

この時刻は UTC で Unix date をミリ秒で表現する必要がある( 1000 倍する )

04/19 16:30 の場合 ( unix date 出して、UTC との時差、9 時間を引いて、ミリ秒にしている echo $(( ($(date -d “2017-04-19 16:30” +%s) - 60 60 9) * 1000 )) => 1492554600000

04/19 17:30 の場合 echo $(( ($(date -d “2017-04-19 17:30” +%s) - 60 60 9) * 1000 )) => 1492558200000

検索例) aws logs filter-log-events –region ap-northeast-1 –log-group-name sns/ap-northeast-1/11111111111111/app/APNS/ExampleProduction –max-items 300000 –start-time 1492554600000 –end-time 1492558200000

Read more...

cloudwatchメモ

クォータ

上限値

EC2 から Logs に飛ばす方法

結構、簡単に飛ばせる。 AWS CloudWatch Logs エージェントで Amazon EC2 上の Nginx の access.log , error.log , php-fpm error.log , Linux の messages , secure ログを収集する

セットアップ

推奨 (CloudWatch agent)

CloudWatch Logs エージェント (awslogs) は非推奨になったため、現在は統合された CloudWatch agent を利用する方が安全です。インストールと設定は公式手順を参照してください。

EC2 の IAM ロールに下記を追加

CloudWatch Logs でのアイデンティティベースのポリシー (IAM ポリシー) の使用

実際のケースだと EC2 には既に IAM ロールが設定済みの場合が多いと思うので、下記を追記する形になる

[ IAM ]->[ ポリシー ]->[ ポリシーの作成 ]->[ JSON ]->テキストフィールドに下記の内容入り込んで[ Review Policy ] ポリシー名には[ CloudWatchLogs ]とした。

Read more...