実運用を想定したAlibaba CloudのLogService構成を考えてみる~ログ収集編~
実運用を想定したAlibaba CloudのLogService構成を考えてみる~ログ収集編~
今回は、Alibaba Cloudの【LogService】について、投稿します。
LogServiceとは、一言でいうとログの収集・検索・可視化ができるサービスです。
本記事では、実運用を想定したときにどのような使い方ができるのかを
ログ収集編とログ解析編に分けて考えていきます。機能についての説明は下記の記事や公式ドキュメントページが分かりやすいかと思います。
「Log Service とは」
「Alibaba Cloudのログ収集機能を使ってみた」
「意外と知らないLogServiceの話」
さて、今回はログ収集編です。
LogServiceの処理概要と使用時の考え方
サーバ内のログをLogServiceで収集する際のフローは下記のイメージです。
用語の説明は公式ドキュメントにお任せするとして、使用する上での考え方を例として記載します。
■前提:
LogService内のオブジェクトをそれぞれ下記のように仮定します。
Project:ディレクトリ
Logstore:サブディレクトリ
Logtail Config:ログファイル
概要:
Projectにてサーバの分類をWebサーバグループと業務サーバグループに分けています。
さらにその配下にあるLogstoreをインスタンス毎に分けることで、インスタンス毎にログを管理することができます。
概要:
Projectにてサーバの分類をWebサーバグループと業務サーバグループに分けています。
大規模構成のため、その配下にさらに機能毎にグループを分けています。
Logstoreを機能が異なるグループ毎で分けることにより、機能毎にログを管理することができます。
なお、LogSearch/Analyticsによる検索を使用し、インスタンス毎でログを検索することも可能です。
以上、二つの例をご紹介しましたが、使い方はプロジェクトによって変わってくるかと思いますので、
実運用に合わせてカスタマイズしてみましょう
次は、収集したログがLogServiceではどういう見え方になるかを確認しましょう。
収集したログがLogServiceではどのように見えるか
繰り返しとなりますが、LogServiceでは、収集・検索・可視化が可能です。
検索や可視化を容易に行うため、LogServiceでは、ログフォーマットに合わせた収集が可能です。例として、Webサーバで下記のアクセスログを一行だけ出力した場合のLogService内でのログの見え方について、記載します。
LogServiceでの見え方は、下記のようになります。(※事前設定要)111.1.1.1 - -[02/Jul/2019:16:42:49 +0800] "POST /web/jsrpc.php?output=json-rpc HTTP/1.1" 200 63 "http://47.1.1.1/web" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
__raw__: 111.1.1.1 - -[02/Jul/2019:16:42:49 +0800] "POST /web/jsrpc.php?output=json-rpc HTTP/1.1" 200 63 "http://47.1.1.1/web" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"__source__: 10.1.1.1__tag__:__hostname__: hostname1__tag__:__path__: /var/log/httpd/access_log__tag__:__user_defined_id__: Web1__topic__: unyo-serverhttp_referer: http://XX.XX.XX.XX/webhttp_user_agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36remote_addr: 111.1.1.1remote_ident: -remote_user: -request_method: POSTrequest_protocol: HTTP/1.1request_uri: /web/jsrpc.php?output=json-rpcresponse_size_bytes: 63status: 200time_local: [02/Jul/2019:16:42:49 +0800]
LogServiceでは、もちろん生ログを表示することは可能です。
今回の例では、該当箇所は__raw__です。
ただ、後のログ解析のためにあらかじめログフォーマットを定義し、
抜き出したい項目や集計したい項目を別途表示させることが可能です。
今回は、ApacheのLogフォーマットLogFormat "%h %l %u %t ¥"%r¥" %>s %b ¥"%{Referer}i¥" ¥"%{User-Agent}i¥"" combinedを
LogService内の設定で定義しております。
8行目以降は、__raw__から%h:remote_addrや%>s:statusを抽出しております。
このように抽出しておけば、後の解析でstatus毎に集計するといったことが可能です。
表示内容については、以下記載します。
| key | value |
|---|---|
| raw | ログ本文 |
| source | ログ収集元IPアドレス |
| tag:hostname | ログ収集元ホスト名 |
| tag:path | ログファイルパス |
| tag:user_defined_id | ログ収集時のECS定義 |
| topic | 分類 |
以降は、Apache準拠のため、valueのご説明は割愛します。
https://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html
| key |
|---|
| http_referer |
| http_user_agent |
| remote_addr |
| remote_ident |
| remote_user |
| request_method |
| request_protocol |
| request_uri |
| response_size_bytes |
| status |
| time_local[ECS内部のシステム時刻] |
ログ収集設定の実施
検証環境は、以下の構成とします。
本記事では、下記の順番で実施していきます。
● Logtailインストール
● Project
● Logstore
● Logtail MachineGroup(日本語表記:LogTailマシングループ)
● Logtail config(日本語表記:LogTail構成)
※なお、構成図は英語表記で記載しておりますが、
本記事にて表示する画面キャプチャについては、日本語表記のものを使用します。
Logtailインストール
各ECSにログインし、以下を実施します。
1.サーバにLogtailをインストールします。
https://www.alibabacloud.com/cloud-tech/doc-detail/28982.htm
# wget http://logtail-release-ap-northeast-1.oss-ap-northeast-1-internal.aliyuncs.com/linux64/logtail.sh -O logtail.sh; chmod 755 logtail.sh; ./logtail.sh install ap-northeast-1
2.Logtailのインストール後、カレントディレクトリにファイルlogtail.shが残るため、必要に応じて削除 or 退避します。
3.サーバ内に/etc/ilogtail/user_defined_idファイルを作成し、構成図内のuser_defined_idをサーバに応じて記載しておきます。
例)Webサーバグループ1ならファイル内にweb-1を記載しておきます。
4.サービスを再起動します。
# systemctl restart ilogtaild.service
LogServiceの設定
ここからは、Alibaba Cloudのコンソール画面を操作します。
※本記事にて表示する画面キャプチャについては、日本語表記のものを使用します。
まずは、Alibaba Cloudのコンソール画面へログインし、【LogService】画面を開きましょう。
Projectの作成
Projectの作成を実施します。
1.LogServiceを開くと【プロジェクト一覧】が表示されます。
右上のプロジェクトの作成をクリックします。
2.プロジェクト名とリージョンを入力し、確認をクリックします。
3.Logstore作成画面へと遷移するポップアップが表示されますが、Projectの作成有無を確認するためにキャンセルをクリックします。
4.Projectが作成されていることを確認します。
※Logstoreを作成する場合は、プロジェクト名をクリックします。
※追加で作成する場合は、右上のプロジェクトの作成をクリックし、追加作成します。
Logstoreの作成
次は、Logstoreの作成です。
1.プロジェクト一覧画面にてプロジェクト名をクリックします。
2.表示されたLogstoreリスト画面にて右上の作成をクリックします。
3.Logstore名とデータ保存期間を入力し、確認をクリックします。
今回は、その他のパラメータはデフォルト値で使用します。
4.Logtail config(Logtail 構成)の作成画面へのポップアップが表示されますが、
Logstore作成有無の確認のために、キャンセルをクリックします。
5.Logstoreが作成されていることを確認します。
続けて作成する場合は、右上の作成をクリックします。
LogtailMachineGroup(Logtailマシングループ)の作成
ここでは、ログ収集対象のサーバを定義します。
1.Logtailマシングループをクリックしてマシングループ画面を表示します。
その後、マシングループの作成をクリックします。
2.下記の項目を入力し、確認をクリックします。
マシングループの識別子については、
IPアドレスとユーザー定義IDが選択可能です。
今回は、IPアドレスではなく、サーバ内で定義しているuser_defined_idを使用するため、
ユーザー定義IDを選択します。
3.Logtailマシングループが作成されていることを確認します。
続けて作成する場合は、右上のマシングループの作成をクリックします。
4.接続確認です。
マシンステータスをクリックし、ハートビートがOKとなっていれば
インスタンスと正常に通信できています。
Logtail config(Logtail 構成)の作成
ここでは、収集対象ログファイルおよび収集時のログフォーマットを定義します。
今回は、下記の3パターンを作成します。
●デフォルト設定での収集
●Apacheログフォーマットでの収集
●カスタマイズしたログの収集
デフォルト設定での収集
デフォルト設定で収集する場合の手順を記載します。
ここでは、/var/log/messagesを収集します。
以下、手順です。
1.データ・インポート・ウイザードアイコンをクリックします。
2.データソースの選択画面にてテキストをクリックします。
3.構成名に任意の値を入力し、ログパスに収集対象ファイルを入力します。
※ファイル名については、ワイルドカードが使用できます。
※モードはデフォルト値のシンプルモードのままにしておきます。
高度な設定を展開し、トピック生成方式にマシングループのトピック属性を指定しておきます。
ここでは、その他の設定はデフォルト設定とし、次へをクリックします。
4.事前に作成したマシングループを選択し、マシングループに適用をクリックします。
5.検索条件のカスタム設定
今回は、デフォルト値で設定します。
6.OSSへのアップロード設定
今回は、OSSへのアップロードを実施しないため、設定変更をせずに確認をクリックします。
7.Logtail config(Logtail 構成)が作成されていることを確認します。
続けて作成を行う場合は、画面右上の作成をクリックします。
Apacheログフォーマットでの収集
Apchceログフォーマットで収集する場合の手順を記載します。
ここでは、/var/log/httpd/access_logを収集します。
※注
上記の手順から追加作成を行います。
なお、
5.検索条件のカスタム設定
6.OSSへのアップロード設定
については、一度設定しておけば追加設定不要です。
以下、手順です。
1.Logtail 構成にて作成をクリックします。
2.データソースの選択にてテキストをクリックします。
3.収集モードの指定にて、必要事項を入力します。
ここでは、ログ収集時のモードをAPACHE設定とし、
ログフォーマットをWebサーバにて使用しているフォーマットを指定します。
APACHE設定フィールドおよびAPACHEキー名はログフォーマット指定時に自動表示されます。
また、生ログについても収集したいため、高度な設定を展開し、オリジナルログを有効化しておきます。
トピック生成方式についてはマシングループのトピック属性を指定しておきます。
ここでは、その他の設定はデフォルト設定とし、次へをクリックします。
4.事前に作成したマシングループを選択し、マシングループに適用をクリックします。
5.Logtail config(Logtail 構成)が作成されていることを確認します。
カスタマイズしたログの収集
カスタマイズしたログを収集する場合の手順を記載します。
ここでは、/var/log/ap/ap1.logを収集します。
※注
上記の『Apacheログフォーマットで収集・解析したい場合』との違いは、項番『3』での収集モードの指定方法のみとなります。
ここでは、収集モードの指定についてのみ記載します。
その他の手順については、同様となります。
そのため、以下は収集モードの指定についてのみ記載します。
カスタマイズしたログを収集する場合は、デミリタモードにて任意のログサンプルを指定し、デミリタにカスタムを選択し、
デミリタを指定することでログを区切ることができます。
なお、デミリタは3文字まで設定できます。
ここでは、:(半角スペース+コロン+半角スペースの3文字)としております。
また、ここでも生ログを出力するため、オリジナルログは有効化しておきます。
トピック生成方式についてはマシングループのトピック属性を指定しておきます。
収集したログの確認
では、実際に収集したログを順番に見ていきましょう。
該当のLogstoreの検索をクリックします。
表示する時間帯は、調整可能です。
Apacheログフォーマットでの収集
ここでは、オリジナルログを有効化しているため、生ログは、__raw__の箇所に表示されます。
また、http_referer以下は、指定通り、分割して表示されてますね。
下記の例だとstatus毎等で集計することも可能です。
カスタマイズしたログの収集
ap_number以下は、指定した通り、分割して表示されてますね。
下記の例だと、messageにerrorと出力しているので、errorの数を集計することも可能です。
まとめ
LogServiceは、ログを収集することはもちろんのこと、ログ解析用として使うことも可能であるため、
LogServiceを使用すれば、ログ収集用のミドルウェアを導入する必要はありません。
そのため、ログ収集用のサーバを構築する必要がなく、構成上の障害ポイントも減るのではないでしょうか。
下記のようなログ収集・解析用の製品導入をご検討されている方は、是非【LogService】についても併せてご検討してみてはいかがでしょうか。
次回の記事では、収集したログをどのように検索・解析するのかを投稿します。
本記事がAlibaba Cloudを使用する際のご参考になれば幸いです。
