問題
EC2が、あるタイミングで大量のNetwork In / Network Packet Inがありサーバが落ちてしまった。
サーバが落ちた時間帯で/var/log/message
を確認したところ、以下のメッセージが
crond[16600]: PAM unable to dlopen(/lib64/security/pam_unix.so): /lib64/security/pam_unix.so: failed to map segment from shared object: Cannot allocate memory
ただ、Nginxのログを確認しても、F5アタックのような大量のアクセスによるものではなく、何か特定の重い処理(ファイルアップロードなど)によるものと推察した。が、それが具体的になんなのかが、現時点では情報不足で判断がつかない。
解決策
VPC Flow Logを作成し、入力時のパケットのボリュームを含め監視することとした。
CloudWatchにロググループ作成
ClodWatchで監視を行うので、先にロググループを適当な名称で ここからつくっておく。(後でフローログの作成時に使う)
権限を持ったIAMロール作成
IAMロールの作り方はこちらを参照。https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/flow-logs-cwl.html#flow-logs-iam-role
ざっくりいうと
- ポリシーの作成
- ポリシーが付与されたロールの作成
フローログ作成
IAMロールを作成したら、VPCのコンソールに移動して、お使いのVPC から 当該VPCをチェック => 右クリックでフローログを作成
名前・フィルタ(私はすべてを選択)・最大集約間隔(10分間を選択)・送信先(CloudWatch Logsを選択)を順次入力し、あらかじめ作成しておいたロググループとあらかじめ作成しておいたIAMロールを選択。
ログレコードは「AWSのデフォルト形式」を選択。
CloudWatchのロググループに移動して、確認すると無事ログが取得できていた。
これで、メモリ不足の原因を追いたいと思う。