インフラ

CloudWatch Logs Insights でApacheのアクセスログを使ってアクセス数の集計をする

cloudwatchagent too many file

こんにちは、ちゃりおです。

Cloudwatch Logs Insights便利ですね。
Apacheのアクセスログを見て、アクセス数の集計とかに使うことが多いです。

集計によく使うクエリをまとめてみます。

Contents

Cloudwatch Logs Insightsとは

CloudWatch Logs Insights では、Amazon CloudWatch Logs のログデータをインタラクティブに検索して分析できます。クエリを実行することで、運用上の問題に効率的かつ効果的に対応できます。問題が発生した場合は、CloudWatch Logs Insights を使用して潜在的原因を特定し、デプロイした修正を検証できます。

Cloudwatch Logs上にあるログに対して、クエリを実行してログ分析ができるサービスです。

各サーバに入って、コマンドを使えば同様の事ができますが
Cloudwatch Logs Insightsを使ったほうが圧倒的に手間が少ないです。

複数のロググループにクエリを実行することもできます。(2020/10時点では、同時に20)

CloudWatch Logs Insights を使用したログデータの分析

クエリ構文については下記のドキュメントにあります。
このドキュメントとサンプルを見ながら、クエリを書くことが多いと思います。
CloudWatch Logs Insights クエリ構文

Apacheのアクセスログを使ってアクセス数の集計

僕はアクセス数の確認とかに使うことが多いです。

count()を外せば、アクセス数の代わりにログを表示することができます。

parseについては、下記のサイトを参考にしました。

CloudWatch Logs Insights でApacheのアクセスログを確認する

アクセス数

parse '* - * [*] "* * *" * * * *' as host, identity, dateTimeString, httpVerb, url, protocol, statusCode, bytes,Referer,UserAgent
| count()

IPアドレスごとのアクセス数

parse '* - * [*] "* * *" * * * *' as host, identity, dateTimeString, httpVerb, url, protocol, statusCode, bytes,Referer,UserAgent
| stats count() as access_count by host 
| sort access_count desc

特定IPからのアクセス数

parse '* - * [*] ""* * *"" * * * *' as host, identity, dateTimeString, httpVerb, url, protocol, statusCode, bytes,Referer,UserAgent
| filter host like /8.8.8.8/ 
| count()

特定URLへのアクセス数

parse '* - * [*] ""* * *"" * * * *' as host, identity, dateTimeString, httpVerb, url, protocol, statusCode, bytes,Referer,UserAgent
| filter url like "/hoge"
| count()

| filter url like “/hoge”

「not like」にすれば、hoge以外のアクセス数にすることもできます。

| filter url not like “/hoge”

特定ステータスコードのアクセス数

parse '* - * [*] "* * *" * * * *' as host, identity, dateTimeString, httpVerb, url, protocol, statusCode, bytes,Referer,UserAgent
| sort dateTimeString desc
| filter statusCode like /(4\d\d)/
| count()

まとめ

CloudWatch Logs Insightsを使ったApacheのアクセスログの集計について紹介しました。
攻撃などがあった際に、どこのIPからどのくらいアクセスがあるのか調べるときによく使っています。

独自のクエリを使いますが、ドキュメントやサンプルもしっかりしているので不自由は感じませんでした。

Athenaでやるほうがクエリの自由度は高いです。
ただ、CloudWatch Logs Insightsのほうが手軽にできるので使い分けていきたいです。

Amzonで「AWS」の本を見てみる

楽天で「AWS」の本をみてみる!!

sap
AWSソリューションアーキテクトプロフェッショナル(SAP)のシンプルな勉強法こんにちは、ちゃりおです。 AWS SAPを取得したので、勉強法を書きます。 いろいろな方法があると思いますが、なるべくシンプルにまと...
Cloudwatchlogトラブルシュート
CloudwatchLogsにログが取り込まれないときに確認することどうも、ちゃりおです。 CloudwatchLogsでログが取り込まれないことがあったので、その際に試したことや 確認するべきことにつ...
cloudwatchプロセス監視
SSMを使わずCloudwatchでEC2上のプロセス監視をしてみるこんにちは、ちゃりおです。 Cloudwatchでプロセス監視をしてみました。 procstatプラグインをつかうことで、以前より簡単...