Posted:
| Categories:
AWS
| Tags:
AWS,
CloudWatch
ログについては、ひとまず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...Posted:
| Categories:
AWS
| Tags:
AWS,
CloudWatch,
lambda,
MediaLive
背景
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...Posted:
| Categories:
AWS
| Tags:
AWS,
CloudWatch
CloudWatchのアラートを設定する方法
ここでは各環境向けにCPUとメモリ使用率のアラートを設定する方法を共有します。以下で説明する alarms.sh、 alarm_mem_template.json、 alarm_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.json と alarm_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...Posted:
| Categories:
cheatsheet
| Tags:
cheatsheet,
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...Posted:
| Categories:
AWS
| Tags:
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...