Alibaba CloudのLog Serviceを使ってアプリケーションログのバックアップをしてみる
今回はAlibaba CloudのLogServiceを使ったアプリケーションログの収集、バックアップを試してみたいと思います。
Alibaba Cloud Log Serviceって?
以下は公式ページからの引用です。
Log Service (略して「Log」) では、Alibaba Cloud プロダクトおよびサービスの各種ログの収集から集計まで
一元的に管理することが可能です。大量のログの処理に高い能力を発揮するため、O&M や運用の効率化に最適です。
とのことです。それでは試していきましょう。
事前準備
今回はアプリケーションログの収集をメインとしたいので、以下のものを事前に準備しました。
- アプリケーションを稼働させるECSのインスタンス
- ログを出力するアプリケーション
- ログを転送するObject Storage Service(OSS)のバケットと、転送するための権限を付与されたロール
ECSインスタンス
ECSのインスタンスについては以下の構成で作成しています。
- リージョン: Asia Pacific NE 1 (Japan)
- インスタンスの仕様: ecs.xn4.small
- インスタンスタイプファミリー: コンパクトタイプ
- CPU: 1コア
- メモリ: 1 GB
- OS: Ubuntu 16.04 64bit
また、SSHログイン後に以下のものもインストールしています。
- go 1.10.2
- git
- nginx
- Logtail(ECSからログファイルをLog Serviceに送るためのアプリケーション)
Logtailのインストールについては、ドキュメント
を参考にしました
アプリケーション
次に、ログを出力するためのアプリケーションですが、私が以前HTTPリクエストをログ出力するために作成した以下のアプリケーションがありますのでインストールし、nginxのupstream経由で動作するよう構築しました。
このアプリケーションはHTTPリクエスト内容をJSONに整形した上で標準出力に出力するので、起動時に標準出力を/var/log/applog/app_stdout.log
にリダイレクトするように指定して起動しました。
OSSへの転送準備
今回出力するログは、Object Storage Service(OSS)に転送してみたいので、転送先として指定可能なOSSのバケットを、以下のように作成しました。
- バケット名: deadcheat-logshipper-bucket
- リージョン: Asia Pacific NE 1 (Tokyo)
また、ログをOSSに転送する設定を行う際に、ロールのArnが必要になります。まだロールを作成していない場合は、RAMのコンソールからロールを作成し権限を付与するか、ドキュメント
から、AliyunLogDefaultRole
ロールを作成するクイック認証ページへのリンクをクリックすることで作成可能です。
Log Serviceを使用する
Alibaba Cloud ConsoleからLogServiceを選択しましょう。Application Services
の項にあります。
Log Serviceの有効化
まだLog Serviceを使ったことがない場合、例によって有効化を促す画面が表示されますので、有効化します。
有効化し、再度LogServiceを起動すると無事LogServiceの管理コンソールが表示されます。
プロジェクトの作成
管理コンソール上でプロジェクトの作成
を選択すると、
- プロジェクト名
- 説明
- リージョン
を選択するダイアログが表示されます。
今回は、
- プロジェクト名: deadcheat-logservice-test
- 説明: なし
- リージョン: Asia Pacific NE 1(Tokyo)
のように入力しました。
入力後確認
をクリックするとダイアログが閉じ、リクエスト中とのメッセージが表示されたあと、すぐに以下のようにプロジェクトを作成しましたが、ログを保存するにはLogStoreを作成する必要があります。
とのダイアログが表示されます。
作成しないと保存できないとのことで作成
をクリックします。
LogStoreの作成
というダイアログが表示されました。
- LogStore 名
- LogStore属性
- WebTracking
- データ保持期間
- シャード数
- 請求料金
以下の内容で入力して確認
をクリックします。
- LogStore 名: deadcheat-logstore-test
- LogStore属性
- WebTracking: OFF
- データ保持期間: デフォルト(30)
- シャード数: 1
- 請求料金: そのまま
今度はLogStoreを作成し、データインポートウィザードを使用してログの収集や分析などの手順について学べます
とのメッセージです。
せっかくなのでメッセージに従ってデータインポートウィザードを使用してみましょう。
先程のメッセージ・ダイアログのデータ・インポート・ウィザード
というボタンをクリックすると以下のような画面が表示されます。
上から
- クラウドサービス
- サードパーティー製のソフトウェア
- 他のソース
とカテゴライズされていますね。
今回のアプリケーションはログファイルに出力しているので、他のソース
からテキスト
を選択し、次へ
をクリックします。データソースの設定
という項目に移り、以下のような画面が表示されます。
この画面では、
- 構成名
- ログパス
- モード
- システム時刻使用
- 高度なオプション
といった項目を入力する必要があります。
- 構成名: deadcheat-logstore-ds-test
- ログパス:
/var/log/applog/app_stdout.log
にログを出力しているので/var/log/**/app_stdout.log
となるように設定 - モード: JSONモード
- 高度なオプション: デフォルトのまま
という内容で入力し、次へ
をクリック。
マシングループに適用
という項目に進みますが、まだ作成していないのでマシングループの作成
を選択します。
マシングループの作成
ダイアログが表示されます。
- グループ名
- マシングループの識別子
- マシングループのトピック
- IP
を入力するようなので、
- グループ名: deadcheat-machinegroup-test
- マシングループの識別子: IP
- マシングループのトピック: なし
- IP: 作成したECSインスタンスに付与されたプライベートIPアドレス
の様に入力し、確認
をクリックします。
新しいマシングループが作成されたらチェックボックスにチェックを入れ、マシングループに適用
をクリックします。
すると、検索、分析、可視化
という項目に進みます。
このとき、まだ有効化されておりません。
というダイアログが出てきて「えっ」となりますが、特に気にしなくて大丈夫そうでした。
この項目の設定は後回しにしたいので、一旦そのまま進みましょう。次へ
をクリックします。
最後に、ShipperとETL
という項目になりますが、まずはログが収集されることを確認したいので、この項目も設定は省略します。データインポートウィザードを終了するため確認
をクリックします。
これでプロジェクトが作成されました、プロジェクトのトップが表示されていると思います。
さて、ログが正常に抽出されているかの確認を行うために、セットアップしたアプリケーション上でログを出力させるために何度かHTTPリクエストを送っておきます。
では確認してみましょう。
プロジェクトのトップ画面に表示されているLogStoreの行から、ログ表示モード
にあるLogHub
の表示
をクリックします。
ログが収集され、表示されているのがわかりました。
ログをOSSに転送しよう
ログが収集できているのを確認したところで、次はこのログをObject Storage Service(OSS)に転送してみましょう。
プロジェクトのトップ、ログ表示モード
にLogShipper
の項目があり、この下にOSS
のリンクがあるのでこれをクリックします。トップでなくても、サブメニューの下の方にLogShipper
というメニューがあり、OSS
のリンクはこちらからもクリックすることができます。
OSS Shipper
の画面が表示されます。プロジェクトのトップ画面から表示した場合はLogStore名がデフォルトで表示されていると思いますが、表示されていない場合はLogStoreを選択してください
と表示されている箇所をクリックすることで選択することが可能です。
LogStoreが選択されている状態で、その横に有効化
というボタンが表示されていると思いますのでこれをクリックします。
OSS LogShipper
という画面が表示されました。
- OSS shipping 名
- OSS Bucket
- OSS Prefix
- ディレクトリ形式
- RAMロール
- 転送サイズ
- 圧縮
- 保存形式
- 転送間隔
を入力する必要があります。ここでは、以下を設定しました。
- OSS shipping 名: deadcheat-logshipper-test
- OSS Bucket: deadcheat-logshipper-bucket (事前に準備していたバケットの名前)
- RAMロール:事前準備で用意したロールのArn
- 圧縮: 圧縮しない
これ以外の項目はデフォルトのままにして設定しています。圧縮をデフォルトのSnappy
から圧縮しない
に変更したのは、保存後に内容を確認するのが少し手間な気がしたためです。通常の保存用途であれば圧縮して構わないと思います。
確認
をクリックするとダイアログが閉じますが、すぐには何も表示いないかもしれません。少しだけ待ってリロードすると以下のように転送の履歴が表示されると思います。
ステータスが成功
となっているのでおそらく成功したものと考えられますね、OSSのコンソールに移動して確認してみます。
仮にステータスが失敗
となる場合、エラーメッセージがステータスの横に表示されるようです。RAMロールなどに不適切なロール(ログのロールでないなど)が設定された場合に失敗となり、その旨がエラーとして表示されます。
無事ファイルがデフォルトの年/月/日/時
で作成されたディレクトリにアップロードされていました。
ダウンロードしてみるには、ファイル名をクリックするとURLが発行されているのでそれを元に取得してください。
ログを解析してみよう
ログを取得して、OSSに転送することもできました。
最後に、少しだけログの解析もやってみましょう。
プロジェクトのトップ、ログ表示モード
に解析検索
という項目と、検索
のリンクがあるのでこれをクリックします。
これまでアプリケーションがファイルに出力し、またLogServiceが収集してくれたログがそのまま表示されています。
LogServiceのセットアップの際に、データインポートウィザードの検索、分析、可視化
項目で後回しにしたので、デフォルトで選択されていたフルテキストインデックス
でログのインデックスが行われています。これはこれで、項目などを検索したり直接テキストボックスに検索クエリを記述する事ができるので、ログが単純な行データの場合はこのままで問題ないパターンが多いかもしれません。
今回はJSONがネストしているログを出力しているので、JSONの項目に対してインデックスしてみます。右上にインデックス属性
というラベルがあるのでこれをクリックし、変更
を選択します。
検索と分析
という画面が表示されました。JSONフィールドに対し手動でインデックスをカスタマイズするには、まずフルテキストインデックス
がOFFになっている必要があるので、これをOFFにします。
また、今回のログ中でHTTPリクエストの情報を詰めているのが、RequestData
という項目になるので、フィールド検索
部分に行を追加し、
- キー: RequestData
- タイプ: JSON
のように入力し、ひとまずこのままOK
をクリックします。
行データとして表示されていたログのRequestData
部分が、JSONとして整形されて表示されるようになりました。これで少しだけ見やすくなりましたね。インデックスを自分で操作することで、よりログの分析などを深く行うことができるようになるはずです。
おわりに
いかがでしたでしょうか、今回はECSで動作させているアプリケーションのログをLogServiceで収集しOSSに転送する方法と、インデックス変更のやり方について学ぶことができました。
ログの収集・保全・解析は、クラウドサービス化であったり、マイクロサービスアーキテクチャやブルーグリーンデプロイメントなどの導入によってサーバーが複数台化しがちな昨今では非常に重要な事柄になってきています。今回学んだように、Log Service
を使用すると非常にログの収集が楽になるのでみなさんも触ってみてください。
また、インデックスや解析画面でのクエリについては今回はほぼ触っていませんが、これを使いこなすことでログの解析などもLogServiceから実現することが出来る様になりますので興味のある方はご覧になってみてください。
今回もお読みいただきありがとうございました。
Author And Source
この問題について(Alibaba CloudのLog Serviceを使ってアプリケーションログのバックアップをしてみる), 我々は、より多くの情報をここで見つけました https://qiita.com/deadcheat_2018/items/c3b474590501d9aeb978著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .