実運用を想定した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をインストールします。
# 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の検索
をクリックします。
表示する時間帯は、調整可能です。
以下、出力結果です。####デフォルト設定での収集 デフォルト設定の場合は、`content`の箇所に生ログが表示されます。 その他に事前に設定した`topic`や`user_defined_id`も表示されていますね。 これを使って検索することも可能です。 ![img](https://raw.githubusercontent.com/sbcloud/help/master/content/usecase-LogService/LogService_images_17680117127215800000/20190711124310.png "img")Apacheログフォーマットでの収集
ここでは、オリジナルログ
を有効化しているため、生ログは、__raw__
の箇所に表示されます。
また、http_referer
以下は、指定通り、分割して表示されてますね。
下記の例だとstatus
毎等で集計することも可能です。
カスタマイズしたログの収集
ap_number
以下は、指定した通り、分割して表示されてますね。
下記の例だと、message
にerror
と出力しているので、errorの数を集計することも可能です。
まとめ
LogServiceは、ログを収集することはもちろんのこと、ログ解析用として使うことも可能であるため、
LogServiceを使用すれば、ログ収集用のミドルウェアを導入する必要はありません。
そのため、ログ収集用のサーバを構築する必要がなく、構成上の障害ポイントも減るのではないでしょうか。
下記のようなログ収集・解析用の製品導入をご検討されている方は、是非【LogService】についても併せてご検討してみてはいかがでしょうか。
次回の記事では、収集したログをどのように検索・解析するのかを投稿します。
本記事がAlibaba Cloudを使用する際のご参考になれば幸いです。