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

f:id:sbc_ali99:20190903123318p:plain

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

今回は、Alibaba Cloudの【LogService】の検索編③を投稿します。
前回の記事では、Apache設定で収集したログの中からstatusアクセス元をstatusで絞って集計し、グラフ化していきました。
本記事では、前回の記事で触れなかったログのダウンロード機能について、ご紹介していきます。

以下、目次です。

ログのダウンロード

LogServiceにて収集したログは、ダウンロードし、手元のテキストエディタ等で参照することが可能です。
本記事では、GUIでのダウンロードとCLIを使用したダウンロードをご紹介致します。

GUIでのダウンロード

AlibabaCloudのコンソール画面にてログのダウンロードを実施します。
LogServiceでは、収集したログとクエリ発行後の集計結果の2種類がダウンロード可能となりますので、
それぞれのダウンロード方法について、記載していきます。

まずは、以下の手順にてログの閲覧画面まで遷移します。

  1. Alibaba Cloudのコンソール画面へログインし、【LogService】画面を開きます。
    f:id:sbc_ali99:20190724150628p:plain

  2. 確認対象のProjectをクリックします。
    ここでは、webserver-projectをクリックします。
    f:id:sbc_ali99:20190724150645p:plain

  3. Logstoreの一覧が表示されます。
    この中から確認対象のLogstoreを選択します。
    ここでは、web1-logstoreログ使用モード配下にある検索をクリックします。
    f:id:sbc_ali99:20190724151054p:plain

  4. 収集したログが表示されます。
    f:id:sbc_ali99:20190830162906p:plain

次項で、ログのダウンロードを実施します。

収集したログのダウンロード

GUI上でログのダウンロードを実施します。
検索対象のログファイルは、サーバIPアドレス172.16.12.83の中の/var/log/httpd/access_logを対象とします。

なお、GUIでのログダウンロードについては、画面上に表示されているログのみがダウンロード対象となります。
1度に画面上に表示できる行数はデフォルト20行、最大100行のため、100行以上のログをダウンロードする場合は、
次のページをクリックし、次頁に遷移して続きのログのダウンロードを実施、または、後述するCLIでのダウンロードを実施して下さい。

以下、手順です。

  1. ログの検索期間を1週(相対)にします。

  2. ログの検索を実施します。
    検索は、こちらの記事の【ログの検索】を参考にログを検索します。
    ※クエリを手動で入力する場合は、下記クエリを入力後検索と分析をクリック、もしくはエンターを押下します。

* and source: 172.16.12.83 and __tag__:__path__: /var/log/httpd/access_log

  3. 検索したログが表示されたことを確認します。

  4. 1ページあたりのログ20であるため、デフォルトでは、ダウンロードできるログは画面上に表示されている20行のみです。
f:id:sbc_ali99:20190830162922p:plain

  5. ログのダウンロードボタンをクリックします。
f:id:sbc_ali99:20190830162937p:plain

  6. ログのダウンロード用のポップアップが表示されたらこのページのログをダウンロードします。を選択します。

  7. OKをクリックします。
f:id:sbc_ali99:20190830162949p:plain

  8. 検索したログがCSV形式で端末に保存されます。
f:id:sbc_ali99:20190830163004p:plain

  9. CSVファイルには、以下のような形式でログが保存されます。
  なお、デフォルトの場合は、20行以上のログは表示されません。 f:id:sbc_ali99:20190830163016p:plain

  10. ログの表示行数は下記を変更することによって、1ページあたり100行に変更することが可能です。
f:id:sbc_ali99:20190830163027p:plain

 

集計結果のダウンロード

LogServiceを使用して集計した結果をGUI上からダウンロードします。

以下、手順です。

  1. ログを集計します。 集計は、こちらの記事の【アクセス元をstatusで絞って集計】を参考に実施します。
    ここでは、/var/log/httpd/access_logにて収集したログの中からstatus200のものをアクセス元毎に上位順に集計しております。

  2. クエリを手動で入力する場合は、下記クエリを入力後検索と分析をクリック、もしくはエンターを押下します。

* and status : 200 | with_pack_meta | select "remote_addr" , pv, pv *1.0/sum(pv) over() as percentage from( select count(1) as pv , "remote_addr" from (select "remote_addr" from log limit 100000) group by "remote_addr" order by pv desc) order by pv desc limit 10

f:id:sbc_ali99:20190830163040p:plain

  3. ログのダウンロードをクリックします。
f:id:sbc_ali99:20190830163054p:plain

  4. ログのダウンロード用のポップアップが表示されたらこのページのログをダウンロードします。を選択します。

  5. OKをクリックします。
f:id:sbc_ali99:20190830163109p:plain

  6. 集計結果がCSV形式で端末に保存されます。
f:id:sbc_ali99:20190830163126p:plain

  7. CSVファイルには、以下のような形式で集計結果が保存されます。
f:id:sbc_ali99:20190830163139p:plain

 

CLIでのダウンロード

LogServiceでは、【AlibabaCloudCLI】ではなく、
【aliyun-log-cli】を使用してLogService内の操作を行います。
【aliyun-log-cli】とは、LogService専用のCLIであり、Logstore等の作成/参照/更新/削除のCRUD操作がCLIから可能となります。
また、GUIでのログダウンロードの上限が最大100行でしたが、CLIを使用することにより、100行以上のログをダウンロードすることが可能となります。

下記にECS(CentOS7.6 64bit)へのaliyun-log-cliのインストール手順を記載します。

  1. こちらを参考に、AccessKeyIdAccessKeySecretを作成します。

  2. 作業対象のECSへログインし、下記のコマンドを投入します。

pip install aliyun-log-cli

  3. 下記のメッセージが表示され、エラーなくインストールができることを確認します。

Successfully installed

  4. 項番1にて取得した、AccessKeyIdAccessKeySecretを用いて、aliyun-log-cliprofileを作成します。
  下記のコマンドを投入します。

aliyunlog configure <AccessKeyId> <AccessKeySecret> <endpoint>

  ※endpointこちらをご参照の上、環境に合わせて入力して下さい。
   なお、本記事では、クラシックネットワークエンドポイントの東京 (日本)リージョンap-northeast-1-intranet.log.aliyuncs.com
   指定しております。
   パブリックネットワークエンドポイントを使用する場合は、CLIを発行するECSにてインターネットアクセスが必要となります。

  5. 下記のコマンドにて、profileが作成されていることを確認します。

# cat /root/.aliyunlogcli
[main]
access-id = XXXXXXXXXX
access-key = XXXXXXXXXXXXX
region-endpoint = ap-northeast-1-intranet.log.aliyuncs.com

aliyun-log-cliの初期設定は以上です。
次項より、ログのダウンロードを実施します。

収集したログのダウンロード

検索対象のログファイルについては、GUIでのログダウンロードと同様に
サーバIPアドレス172.16.12.83の中の/var/log/httpd/access_logを対象とします。

以下、手順です。

  1. GUIでのログダウンロードと同様に収集対象ログを検索した後、ログのダウンロードボタンを押下します。
    f:id:sbc_ali99:20190830163205p:plain

  2. ログのダウンロード用のポップアップが表示されたらコマンドラインツールからすべてのログをダウンロードする。を選択します。

  3. CLIにて使用できるコマンドが表示されます。

  4. コマンドのコピーを押下し、クリップボードにコピーした後、テキストエディタに貼り付けます。

  5. キャンセルをクリックし、ポップアップを閉じます。
    なお、OKをクリックした場合は、aliyun-log-cliのドキュメントページへ遷移します。
    f:id:sbc_ali99:20190830163219p:plain

  6. コマンドの編集を行います。
    編集前のコマンドは以下の通りです。

aliyunlog log get_log_all --project="webserver-project-01" --logstore="web1-logstore" --query="* and source: 172.16.12.83 and __tag__:__path__ : /var/log/httpd/access_log" --from_time="2019-08-22 17:25:39+09:00" --to_time="2019-08-29 17:25:39+09:00" --region-endpoint="ap-northeast-1-intranet.log.aliyuncs.com" --format-output=no_escape --jmes-filter="join('\n', map(&to_string(@), @))" --access-id="【ステップ 2 のアクセス ID】" --access-key="【ステップ 2 のアクセスキー】" >> /downloaded_data.txt

  7. ログの抽出時間帯を任意の時間帯に修正します。

--from_time="2019-08-22 00:00:00+09:00" --to_time="2019-08-30 00:00:00+09:00"

  8. 本記事では、profileの設定にて下記3つのは設定済みであるため、削除します。

--region-endpoint=XXXXX
--access-id=XXXXX
--access-key=XXXXX

  9. ログの出力先を任意のファイルパスに変更します。
   本記事では、/tmp/配下に出力とし、任意のファイル名に変更し、拡張子をcsvとします。

>> /tmp/172.16.12.83-access_log-test.csv

  10. 編集後のコマンドは以下の通りです。
   このコマンドをaliyun-log-cliが使用できる環境のECSで実行します。

aliyunlog log get_log_all --project="webserver-project-01" --logstore="web1-logstore" --query="* and source: 172.16.12.83 and __tag__:__path__ : /var/log/httpd/access_log" --from_time="2019-08-22 00:00:00+09:00" --to_time="2019-08-30 00:00:00+09:00" --format-output=no_escape --jmes-filter="join('\n', map(&to_string(@), @))" >> /tmp/172.16.12.83-access_log-test.csv

  11. CSVファイルの内容は以下のような形式となります。
f:id:sbc_ali99:20190902102545p:plain

集計結果のダウンロード

GUIでの集計と同様に/var/log/httpd/access_logにて収集したログの中からstatus200のものをアクセス元毎に上位順に集計します。

以下、手順です。

  1. GUIでの手順と同様にクエリを発行し、集計を実施した後、ログのダウンロードボタンを押下します。
    f:id:sbc_ali99:20190830163252p:plain

  2. ログのダウンロード用のポップアップが表示されたらコマンドラインツールからすべてのログをダウンロードする。を選択します。

  3. CLIにて使用できるコマンドが表示されます。
    クエリ内にてselect文にて集計されていることが確認できます。

  4. コマンドのコピーを押下し、クリップボードにコピーした後、テキストエディタに貼り付けます。

  5. キャンセルをクリックし、ポップアップを閉じます。 f:id:sbc_ali99:20190830163303p:plain

  6. ログダウンロード時と同様にコマンドを編集します。
    編集前のコマンドは以下の通りです。

aliyunlog log get_log_all --project="webserver-project-01" --logstore="web1-logstore" --query="* and __tag__:__path__ : /var/log/httpd/access_log | with_pack_meta | select \"remote_addr\" , pv, pv *1.0/sum(pv) over() as percentage from( select count(1) as pv , \"remote_addr\" from (select \"remote_addr\" from log limit 100000) group by \"remote_addr\" order by pv desc) order by pv desc limit 10" --from_time="2019-08-23 10:56:51+09:00" --to_time="2019-08-30 10:56:51+09:00" --region-endpoint="ap-northeast-1.log.aliyuncs.com" --format-output=no_escape --jmes-filter="join('\n', map(&to_string(@), @))" --access-id="【ステップ 2 のアクセス ID】" --access-key="【ステップ 2 のアクセスキー】" >> /downloaded_data.txt

  7. 編集内容は以下の通りです。
   ●ログの抽出時間帯を任意の時間帯に修正します。

--from_time="2019-08-22 00:00:00+09:00" --to_time="2019-08-30 00:00:00+09:00"

   ●下記3つのkeyとvalueを削除します。

 --region-endpoint=XXXXX
 --access-id=XXXXX
 --access-key=XXXXX

   ●ログの出力先を任意のファイルパスに変更します。

/tmp/172.16.12.83-access_log-test_aggregate.csv

  8. 編集後のコマンドは以下の通りです。
   このコマンドをaliyun-log-cliが使用できる環境のECSで実行します。

aliyunlog log get_log_all --project="webserver-project-01" --logstore="web1-logstore" --query="* and __tag__:__path__ : /var/log/httpd/access_log | with_pack_meta | select \"remote_addr\" , pv, pv *1.0/sum(pv) over() as percentage from( select count(1) as pv , \"remote_addr\" from (select \"remote_addr\" from log limit 100000) group by \"remote_addr\" order by pv desc) order by pv desc limit 10" --from_time="2019-08-22 00:00:00+09:00" --to_time="2019-08-30 00:00:00+09:00" --format-output=no_escape --jmes-filter="join('\n', map(&to_string(@), @))" >> /tmp/172.16.12.83-access_log-test_aggregate.csv

  9. CSVファイルの出力内容は以下のような形式となります。
f:id:sbc_ali99:20190830163319p:plain

まとめ

今回は、LogServiceにて出力したログのダウンロード方法をご紹介しました。
次回は、ダッシュボードの作成を交えて様々なグラフ作成をご紹介致します。
ありがとうございました。