実運用を想定したAlibaba CloudのLogService構成を考えてみる~ログ収集編~

f:id:sbc_ali99:20190903123045p:plain

こんにちは! エンジニアのYです。

今回は、Alibaba Cloudの【LogService】について、投稿します。

LogServiceとは、一言でいうとログの収集・検索・可視化ができるサービスです。

本記事では、実運用を想定したときにどのような使い方ができるのかを
ログ収集編ログ解析編に分けて考えていきます。

機能についての説明は下記の記事や公式ドキュメントページが分かりやすいかと思います。
Log Service とは
Alibaba Cloudのログ収集機能を使ってみた
意外と知らないLogServiceの話


さて、今回はログ収集編です。


LogServiceの処理概要と使用時の考え方

サーバ内のログをLogServiceで収集する際のフローは下記のイメージです。

f:id:sbc_ali99:20190711194237p:plain

用語の説明は公式ドキュメントにお任せするとして、使用する上での考え方を例として記載します。

■前提:
 LogService内のオブジェクトをそれぞれ下記のように仮定します。
  Project:ディレクトリ
  Logstore:サブディレクトリ
  Logtail Config:ログファイル

f:id:sbc_ali99:20190711211750p:plain

これを踏まえて、二つの使用例を記載します。

例1)インスタンス毎にログを管理したい場合
 想定:
  小規模構成であり、ECSをスケールさせる必要がないため、インスタンス毎にログを管理する必要がある。

 概要:
  Projectにてサーバの分類をWebサーバグループと業務サーバグループに分けています。
  さらにその配下にあるLogstoreをインスタンス毎に分けることで、インスタンス毎にログを管理することができます。

  f:id:sbc_ali99:20190711205140p:plain

例2)サーバ種別毎にログを管理したい場合
 想定:
  大規模構成であり、ECSを頻繁にスケールさせるため、機能毎にログを管理する必要がある。

 概要:
  Projectにてサーバの分類をWebサーバグループと業務サーバグループに分けています。
  大規模構成のため、その配下にさらに機能毎にグループを分けています。
  Logstoreを機能が異なるグループ毎で分けることにより、機能毎にログを管理することができます。

  なお、LogSearch/Analyticsによる検索を使用し、インスタンス毎でログを検索することも可能です。

  f:id:sbc_ali99:20190711205244p:plain

以上、二つの例をご紹介しましたが、使い方はプロジェクトによって変わってくるかと思いますので、
実運用に合わせてカスタマイズしてみましょう!

次は、収集したログがLogServiceではどういう見え方になるかを確認しましょう。


収集したログがLogServiceではどのように見えるか

繰り返しとなりますが、LogServiceでは、収集・検索・可視化が可能です。
検索や可視化を容易に行うため、LogServiceでは、ログフォーマットに合わせた収集が可能です。

例として、Webサーバで下記のアクセスログを一行だけ出力した場合の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"

LogServiceでの見え方は、下記のようになります。(※事前設定要)

__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-server
http_referer:  http://XX.XX.XX.XX/web
http_user_agent:  Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
remote_addr:  111.1.1.1
remote_ident:  -
remote_user:  -
request_method:  POST
request_protocol:  HTTP/1.1
request_uri:  /web/jsrpc.php?output=json-rpc
response_size_bytes:  63
status:  200
time_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のご説明は割愛します。

 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内部のシステム時刻]



では、実際に設定してみましょう!

ログ収集設定の実施

検証環境は、以下の構成とします。

f:id:sbc_ali99:20190711194344p:plain


本記事では、下記の順番で実施していきます。
 ● 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】画面を開きましょう。

f:id:sbc_ali99:20190710164511p:plain

Projectの作成

Projectの作成を実施します。

1.LogServiceを開くと【プロジェクト一覧】が表示されます。
  右上のプロジェクトの作成をクリックします。

f:id:sbc_ali99:20190710164652p:plain

2.プロジェクト名リージョンを入力し、確認をクリックします。

f:id:sbc_ali99:20190710193040p:plain

3.Logstore作成画面へと遷移するポップアップが表示されますが、Projectの作成有無を確認するためにキャンセルをクリックします。

f:id:sbc_ali99:20190710201012p:plain

4.Projectが作成されていることを確認します。
  ※Logstoreを作成する場合は、プロジェクト名をクリックします。
  ※追加で作成する場合は、右上のプロジェクトの作成をクリックし、追加作成します。

f:id:sbc_ali99:20190710194159p:plain


Logstoreの作成

次は、Logstoreの作成です。

1.プロジェクト一覧画面にてプロジェクト名をクリックします。

f:id:sbc_ali99:20190710194756p:plain

2.表示されたLogstoreリスト画面にて右上の作成をクリックします。

f:id:sbc_ali99:20190710201546p:plain



3.Logstore名データ保存期間を入力し、確認をクリックします。
  今回は、その他のパラメータはデフォルト値で使用します。

f:id:sbc_ali99:20190710201855p:plain

4.Logtail config(Logtail 構成)の作成画面へのポップアップが表示されますが、
  Logstore作成有無の確認のために、キャンセルをクリックします。

f:id:sbc_ali99:20190710202113p:plain

5.Logstoreが作成されていることを確認します。
  続けて作成する場合は、右上の作成をクリックします。

f:id:sbc_ali99:20190710202615p:plain

LogtailMachineGroup(Logtailマシングループ)の作成

ここでは、ログ収集対象のサーバを定義します。

1.Logtailマシングループをクリックしてマシングループ画面を表示します。
  その後、マシングループの作成をクリックします。

f:id:sbc_ali99:20190710195135p:plain

2.下記の項目を入力し、確認をクリックします。
  マシングループの識別子については、
  IPアドレスユーザー定義IDが選択可能です。
  今回は、IPアドレスではなく、サーバ内で定義しているuser_defined_idを使用するため、
  ユーザー定義IDを選択します。

f:id:sbc_ali99:20190710225451p:plain

3.Logtailマシングループが作成されていることを確認します。
  続けて作成する場合は、右上のマシングループの作成をクリックします。

f:id:sbc_ali99:20190711105431p:plain

4.接続確認です。
  マシンステータスをクリックし、ハートビートOKとなっていれば
  インスタンスと正常に通信できています。

f:id:sbc_ali99:20190711110130p:plain

f:id:sbc_ali99:20190711110215p:plain

Logtail config(Logtail 構成)の作成

ここでは、収集対象ログファイルおよび収集時のログフォーマットを定義します。
今回は、下記の3パターンを作成します。
 ●デフォルト設定での収集
 ●Apacheログフォーマットでの収集
 ●カスタマイズしたログの収集

デフォルト設定での収集

デフォルト設定で収集する場合の手順を記載します。
ここでは、/var/log/messagesを収集します。
以下、手順です。

1.データ・インポート・ウイザードアイコンをクリックします。

f:id:sbc_ali99:20190710204331p:plain

2.データソースの選択画面にてテキストをクリックします。

f:id:sbc_ali99:20190710204841p:plain



3.構成名に任意の値を入力し、ログパスに収集対象ファイルを入力します。
   ※ファイル名については、ワイルドカードが使用できます。
   ※モードはデフォルト値のシンプルモードのままにしておきます。

  高度な設定を展開し、トピック生成方式マシングループのトピック属性を指定しておきます。
  ここでは、その他の設定はデフォルト設定とし、次へをクリックします。

f:id:sbc_ali99:20190711121424p:plain
f:id:sbc_ali99:20190711120348p:plain
f:id:sbc_ali99:20190710215741p:plain

4.事前に作成したマシングループを選択し、マシングループに適用をクリックします。

f:id:sbc_ali99:20190710205921p:plain

5.検索条件のカスタム設定

今回は、デフォルト値で設定します。

f:id:sbc_ali99:20190710210454p:plain

6.OSSへのアップロード設定

今回は、OSSへのアップロードを実施しないため、設定変更をせずに確認をクリックします。
f:id:sbc_ali99:20190710210812p:plain

7.Logtail config(Logtail 構成)が作成されていることを確認します。
  続けて作成を行う場合は、画面右上の作成をクリックします。

f:id:sbc_ali99:20190710205945p:plain

Apacheログフォーマットでの収集

Apchceログフォーマットで収集する場合の手順を記載します。
ここでは、/var/log/httpd/access_logを収集します。

※注
上記の手順から追加作成を行います。
なお、
 5.検索条件のカスタム設定
 6.OSSへのアップロード設定
については、一度設定しておけば追加設定不要です。


以下、手順です。

1.Logtail 構成にて作成をクリックします。

f:id:sbc_ali99:20190710214821p:plain

2.データソースの選択にてテキストをクリックします。

f:id:sbc_ali99:20190710214852p:plain

3.収集モードの指定にて、必要事項を入力します。
  ここでは、ログ収集時のモードをAPACHE設定とし、
  ログフォーマットをWebサーバにて使用しているフォーマットを指定します。
  APACHE設定フィールドおよびAPACHEキー名ログフォーマット指定時に自動表示されます。
  また、生ログについても収集したいため、高度な設定を展開し、オリジナルログを有効化しておきます。
  トピック生成方式についてはマシングループのトピック属性を指定しておきます。
  ここでは、その他の設定はデフォルト設定とし、次へをクリックします。

f:id:sbc_ali99:20190710214923p:plain
f:id:sbc_ali99:20190710222312p:plain
f:id:sbc_ali99:20190711121834p:plain
f:id:sbc_ali99:20190710215741p:plain

4.事前に作成したマシングループを選択し、マシングループに適用をクリックします。

f:id:sbc_ali99:20190710205921p:plain

5.Logtail config(Logtail 構成)が作成されていることを確認します。

f:id:sbc_ali99:20190710220056p:plain



カスタマイズしたログの収集

カスタマイズしたログを収集する場合の手順を記載します。
ここでは、/var/log/ap/ap1.logを収集します。

※注
上記の『Apacheログフォーマットで収集・解析したい場合』との違いは、項番『3』での収集モードの指定方法のみとなります。
ここでは、収集モードの指定についてのみ記載します。
その他の手順については、同様となります。
そのため、以下は収集モードの指定についてのみ記載します。

カスタマイズしたログを収集する場合は、デミリタモードにて任意のログサンプルを指定し、デミリタカスタムを選択し、
デミリタを指定することでログを区切ることができます。
なお、デミリタは3文字まで設定できます。
ここでは、:(半角スペース+コロン+半角スペースの3文字)としております。
また、ここでも生ログを出力するため、オリジナルログは有効化しておきます。
トピック生成方式についてはマシングループのトピック属性を指定しておきます。

f:id:sbc_ali99:20190710221236p:plain
f:id:sbc_ali99:20190710222312p:plain
f:id:sbc_ali99:20190711121834p:plain
f:id:sbc_ali99:20190710215741p:plain

収集したログの確認

では、実際に収集したログを順番に見ていきましょう。
該当のLogstoreの検索をクリックします。
f:id:sbc_ali99:20190711124936p:plain
表示する時間帯は、調整可能です。
f:id:sbc_ali99:20190711124947p:plain

以下、出力結果です。

デフォルト設定での収集

デフォルト設定の場合は、contentの箇所に生ログが表示されます。
その他に事前に設定したtopicuser_defined_idも表示されていますね。
これを使って検索することも可能です。

f:id:sbc_ali99:20190711124310p:plain

Apacheログフォーマットでの収集

ここでは、オリジナルログを有効化しているため、生ログは、__raw__の箇所に表示されます。
また、http_referer以下は、指定通り、分割して表示されてますね。
下記の例だとstatus毎等で集計することも可能です。

f:id:sbc_ali99:20190711124335p:plain

カスタマイズしたログの収集

ap_number以下は、指定した通り、分割して表示されてますね。
下記の例だと、messageerrorと出力しているので、errorの数を集計することも可能です。

f:id:sbc_ali99:20190711124352p:plain

次回は、これらの機能を使用して、実際にログを検索・解析していきましょう!

まとめ

LogServiceは、ログを収集することはもちろんのこと、ログ解析用として使うことも可能であるため、
LogServiceを使用すれば、ログ収集用のミドルウェアを導入する必要はありません。
そのため、ログ収集用のサーバを構築する必要がなく、構成上の障害ポイントも減るのではないでしょうか。

下記のようなログ収集・解析用の製品導入をご検討されている方は、是非【LogService】についても併せてご検討してみてはいかがでしょうか。

f:id:sbc_ali99:20190710121548p:plain

では、 次回の記事では、収集したログをどのように検索・解析するのかを投稿します。
本記事がAlibaba Cloudを使用する際のご参考になれば幸いです。
ありがとうございました。