狠狠撸
Submit Search
颁濒辞耻诲贬耻产のロク?ハ?ックアッフ?について
?
3 likes
?
1,489 views
MuleSoft Meetup Tokyo
Follow
2020/11/19に行われたMuleSoft Meetup Tokyo #5 の世古さんのセッションスライド
Read less
Read more
1 of 36
Download now
Download to read offline
More Related Content
颁濒辞耻诲贬耻产のロク?ハ?ックアッフ?について
1.
Mule Meetup Tokyo
#5 2020/11/19 株式会社オージス総研 世古雄也 (OGIS-RI Co.,Ltd. Yuya Seko) 颁濒辞耻诲贬耻产のログバックアップについて
2.
Copyright (C) 2019
OGIS-RI All rights reserved. ??紹介 ? 世古雄也(Seko_Yuya@ogis-ri.co.jp) ? 株式会社オージス総研 – アライアンスソリューション部 ? インテグレーションエンジニア – APIを利?してシステムを連携するプロジェクトに参画 – 主にAWSを利?したシステム開発を?っていた。 – 最近はMuleでアプリ制作を担当している。 ? RAMLやDataWeaveと仲良し。
3.
Copyright (C) 2019
OGIS-RI All rights reserved. アジェンダ ? 颁濒辞耻诲贬耻产のログ ? ログバックアップの仕组み ? 设计ポイントと注意点 ? ?かったこと ? まとめ
4.
颁濒辞耻诲贬耻产のログ
5.
Copyright (C) 2019
OGIS-RI All rights reserved. アプリケーションログ 監査ログ CludHubの2つのログ ? アプリケーションから出?されるログ ? Runtime Managerから参照可能 ? 誰が、いつ、どのサービス対して、どのような更新 系のアクションを?なったのか記録する監査?の ログ ? Access Managementから参照可能
6.
Copyright (C) 2019
OGIS-RI All rights reserved. アプリケーションログ 監査ログ ログの出?単位と保持期間 ? 出?単位 – Worker毎 ? ログの保持期間 – ログはどちらかの条件に?致したら?動的に削 除される ? 100MB ? 30?間 出典?https://docs.mulesoft.com/jp/runtime-manager/viewing-log-data ? 出?単位 – ビジネスグループ ? ログの保持期間 – 6年間 出典?https://docs.mulesoft.com/jp/access-management/audit-logging
7.
Copyright (C) 2019
OGIS-RI All rights reserved. 問題 解決策 ログバックアップを作った背景 ? アプリケーションログは30?と保持期間が短い。 しかも、ログの出?が多いアプリケーションは30 ?よりも早くログが削除される可能性がある。 – 障害時の追跡が難しい場合がある。 – 監査で?期のログが必要になる可能性がある。 ? 定期的にアプリケーションログをバックアップする 仕組みを作ろう??? 30日 OR 100MB アプリケーションログ アプリケーションログ ストレージ
8.
ログバックアップの仕组み
9.
Copyright (C) 2019
OGIS-RI All rights reserved. CloudHubの構造とログの配置場所 Cloud Hub 組織(OGIS-RI) 環境(DEV) 環境(STG) アプリケーションA アプリケ ーション B Worker1 Worker2 アプリケーシ ョンログ アプリケーシ ョンログ 環境(PROD) アプリケ ーション C
10.
Copyright (C) 2019
OGIS-RI All rights reserved. ログバックアップの環境と仕様 ? 実?環境 – AWS ? Amazon EventBridge(旧CloudWatch Events) ? AWS Lambda(Java8) ? S3 ? 仕様 – Lambdaの環境変数でログをバックアップす るアプリケーションを指定する。 – 1アプリに紐づいているすべてのWorkerのロ グを取得する。 – S3にデータを保管する。 – バックアップの周期は?次とする。 組織 環境 アプリケーション Worker1 Worker2 アプリケーシ ョンログ アプリケーシ ョンログ 1つのLambda関数で ターゲットとするログ
11.
Copyright (C) 2019
OGIS-RI All rights reserved. ログバックアップの全体像 ? MuleSoftが提供しているCloudHubのAPIを利?してログをバックアップする仕組みを構 築した。 Amazon EventBridge (旧CloudWatch Events) AWS Lambda 1.トリガー (日次) CloudHub API 2.ログ取得 (API呼び出し) AWS S3 3.ログの保存
12.
Copyright (C) 2019
OGIS-RI All rights reserved. Lambdaの実?プロセスの流れ 組織 環境 アプリケーション Worker1 Worker2 アプリケーシ ョンログ アプリケーシ ョンログ Cloud Hub 1. アクセス トークン取得 2. 組織ID取得 3. 環境ID取得 4. Worker一覧取得 5. ログ取得 アプリケーシ ョンログ AWS S3 6. ログ保管 5と6の処理は Worker分繰り返し AWS Lambda 対象のアプリケーション はLambdaの環境変数か ら設定
13.
Copyright (C) 2019
OGIS-RI All rights reserved. 1. アクセストークン取得 ? 処理内容 – CloudHub APIを利?するためのアクセストー クンを取得する。 ? 備考 – 認証は「Username and Password Authentication」を使? ? 「username」と「password」を使?してアクセ ストークンを発?する?法 POST /accounts/login HTTP/1.1 Content-Type: application/json { "username" : "joe", "password" : "password" } 参考URL https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7- 23abe036327a.anypoint-platform/access-management-api/minor/1.0/pages/Authentication/
14.
Copyright (C) 2019
OGIS-RI All rights reserved. 2. 組織ID取得 ? 処理内容 – CloudHub APIを利?して、アクセストークンに 紐づくユーザーが所属している組織のIDを取得 する。 ? 備考 – 組織IDはCloudHubからも参照可能 – Lambdaの環境変数の設定情報とすることも できるが、今回はAPIから取得する?法とした。 ? 環境変数の設定情報を減らすため。 参考URL https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7- 23abe036327a.anypoint-platform/access-management-api/minor/1.0/console/method/%233262/ Access Managementから参 照可能
15.
Copyright (C) 2019
OGIS-RI All rights reserved. 3. 環境ID取得 ? 処理内容 – 組織IDを利?して、環境?覧を取得する。 – 取得した環境?覧よりLambdaの環境変数に設定 されている環境名のIDを取得する。 ? 備考 – 環境IDはCloudHubからも参照可能 – 今回はLambdaの環境変数の設定に「環境名」を設 定する?針とした。 ? 環境IDの場合、設定を?てもどの環境か判断がつかな いため。 参考URL https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7- 23abe036327a.anypoint-platform/access-management-api/minor/1.0/console/method/%233725/ API Managerから参 照可能 { "data": [ { "name": "Production", "organizationId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxx", }, { "name": "Sandbox", "organizationId": "yyyyyyyy-yyyy-yyyy-yyyy-yyyy", } ] }環境名をキーに IDを取得
16.
Copyright (C) 2019
OGIS-RI All rights reserved. 4. Worker?覧取得 ? 処理内容 – 環境IDとLambdaに設定されているアプリケー ション名を利?して、バックアップ対象となる Worker?覧を取得する。 ? 備考 – ?覧で取得したWorkerは起動中のものだけで なく、停?されたWorkerも含まれる。 ※ここはもう少し詳しく、後のスライドで説明する。 参考URL https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7- 23abe036327a.anypoint-platform/cloudhub-api/minor/1.0/console/method/%232194/ { "data": [ { "deploymentId": "xxxxxxxxxxxxxxxxxxxx", "endTime": "2020-05-20T11:18:36.288Z", "instances": [ { "instanceId": "xxxxxxxxxxxxxxxxxxxx-0", "publicIPAddress": "18.179.9.162", "region": "ap-northeast-1", "status": "TERMINATED" } ], }, { "deploymentId": "yyyyyyyyyyyyyyyyyyy", "instances": [ { "instanceId": "yyyyyyyyyyyyyyyyyyy-0", "publicIPAddress": "18.181.86.91", "region": "ap-northeast-1", "status": "STARTED" } ] } ], "total": 2 } 停止している Workerも含まれ る
17.
Copyright (C) 2019
OGIS-RI All rights reserved. 5. ログ取得 ? 処理内容 – Worker?覧で取得したWorker情報を利? して、Workerのログを取得する。 – 取得したログはLambdaのローカルストレージに ?時保存する。 ? 備考 – Lambdaのローカルストレージ(/tmp)は 512MBの容量が?意されている。 – アプリケーションログの最?容量は100MBのた めLambdaのローカルストレージに?時保存で きる。 参考URL https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7- 23abe036327a.anypoint-platform/cloudhub-api/minor/1.0/console/method/%232317/ https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-limits.html ローカルストレージ Workerの アプリケーション ログファイル
18.
Copyright (C) 2019
OGIS-RI All rights reserved. 6. ログ保管 ? 処理内容 – Lambdaのローカルストレージに保管したログをS3に配置する。 – 配置が終わったらログはローカルストレージから削除する。 ローカルストレージ Workerの アプリケーション ログファイル バケット Workerの アプリケーション ログファイル S3へ配置が終 わったログファ イルは削除
19.
设计ポイントと注意点
20.
Copyright (C) 2019
OGIS-RI All rights reserved. バックアップログを取得するための権限 ? ログバックアップを取得するためのAPI呼び出し権限は「Runtime Manager - Read Applications」だけである。 ? バックアップ専?ユーザーを作成して権限を付与した。 アプリケーショ ンが配置されて いる環境 必要な権限 Runtime Manager
21.
Copyright (C) 2019
OGIS-RI All rights reserved. ログの重複バックアップ ? ログを取得するAPIは?付や間隔の指定ができない。 ? デプロイメントとバックアップのタイミングによっては、過去のログが重複してバックアップされる。 Deploy ment 1 Deployment 3 前回のバックアップ日時 今回のバックアップ日時 Deployment 1 Deployment 2 Deployment 1 Deployment 2Deployment 2 Deploy ment 2 前回のバックアップ範囲 今回のバックアップ範囲 前回バックアップ済みのログが今回もバックアップされる。どこまでバックアップされるかは、ログの サイズやローテーションのタイミングに依存する デプロイのパターン1 デプロイのパターン2 デプロイのパターン3 時間軸
22.
Copyright (C) 2019
OGIS-RI All rights reserved. 停?したWorker ? Worker?覧取得APIで取得したWorkerの中には、起動中のものだけでなく停?したも のも含まれる。 ? 停?したWorkerをバックアップ対象から外すには注意が必要である。なぜなら、前回バック アップからデプロイを挟むと、取得していないログ情報が停?したWorkerに含まれるからであ る。 前回のバックアップ日時 今回のバックアップ日時 Deployment 1 Deployment 2 前回のバックアップ範囲 デプロイのパターン 時間軸 Workerが 切り替わっ ている 前回から今回のバックアップまで の期間で追加されたログ 停止しているWorker のログも取得可能 Runtime Managerのログ画面
23.
Copyright (C) 2019
OGIS-RI All rights reserved. 空(0バイト)のログファイル ? 停?されたWorker情報は30?以上残る。 ? アプリケーションログの保持期間は30?間である。 ? 停?されて30?以上経過したWorkerから取得できるログは空(0バイト)のログファイルに なる。また、起動中のWorkerでも30?間ログが出?されないと空のログファイルになる。 起動中 起動中Worker1 Worker2 停止 30日経過 Workerが切り替わってからログが 出力されないまま30日経過 時間軸 アプリケーションのデプロイや Worker再起動でWorkerが切り替わる このタイミングで取得 したログは空ファイル となる
24.
Copyright (C) 2019
OGIS-RI All rights reserved. 空のログファイルの取り扱い案 案 説明 メリット デメリット すべて取得案 ?起動、停止にかかわ らず、空のログファイ ルをバックアップし続 ける ?Lambdaを起動した回数分のログファ イルが作成されるため、バックアップ ファイルの日付の一覧性がある ?停止しているWorkerが廃棄されるまで 空のログファイルを取得し続けるため、 無駄なファイルが増える 空ファイル除 外案 ?起動、停止にかかわ らず、空のログファイ ルをバックアップしな い ?空のログファイルが作成されないため、 S3のファイル数が無駄に増えない ?下記のようにバックアップファイルの 日付の一貫性が損なわれる可能性がある 20200812120000.log 20200812130000.log 20200812150000.log 20200812160000.log Workerのス テータスで取 り扱いを分け る案 ?起動中の場合、空の ログファイルをバック アップする ?停止中の場合、空の ログファイルをバック アップしない ?起動中のWorkerに対して、常にバック アップを取得するため、バックアップ ファイルの日付の一貫性がある ?停止中のWorkerの空のログファイルは 取得しないため、すべて取得案に比べて S3に無駄なファイルを作成しない ?Workerのステータスを把握をしないと、 空のログファイルを取得しているWorker か、取得していないか判断できない Copyright ? 2019-2020 OGIS-RI Co., Ltd. All rights reserved.
25.
Copyright (C) 2019
OGIS-RI All rights reserved. 重複しているAPIエンドポイントと権限 ? 環境IDを取得できるAPIのエンドポイントは2つある。 – https://anypoint.mulesoft.com/accounts/api/organizations/{orgId}/environments – https://anypoint.mulesoft.com/accounts/api/cs/organizations/{orgId}/environme nts ? この?つには決定的な違いがある。 – 前者(csがついていない?) ? 「Runtime Manager - Read Applications」権限で呼び出し可能 – 後者(csがついている?) ? 「CloudHub Admin」のロールが必要 ? ログバックアップでは、弱い権限で呼び出し可能な前者を利?してシステムを構築した。 ? CSがついているエンドポイントと、ついていないものの違いは不明である。 参考URL https://anypoint.mulesoft.com/exchange/portals/anypoint-platform/f1e97bc6-315a-4490-82a7- 23abe036327a.anypoint-platform/access-management-api/minor/1.0/console/method/%232076/
26.
Copyright (C) 2019
OGIS-RI All rights reserved. プログラムの設定 環境変数の設定 各種設定 ? ?途 – 構成管理に含めて良いものを設定する。 – 環境によって差異がないものを設定する。 – 更新の頻度が少ないものを設定する。 ? ログバックアップで設定した値 – ログ取得のためのURL情報 ? ?途 – 構成管理に含めたくないもの(クレデンシャル情報)を設 定する。 – 環境によって差異があるものを設定する。 – 更新の頻度(可能性)が?いものを設定する。 ? ログバックアップで設定した値 – ユーザー名 – パスワード – アプリがデプロイされている環境情報(dev,stg) – アプリケーション名 – S3の各種情報 ? 設定項?はプログラム(jarやwar)に含める値と環境変数から設定する値がある。
27.
?かった点
28.
Copyright (C) 2019
OGIS-RI All rights reserved. APIドキュメント ? MuleSoftが提供している?通りのAPIを調査したが、ドキュメントがないものがあるため理 解できなかったAPIがある。 – Tokenization Creation and Mgmt API – ARM Monitoring Query – など Homeのページだけでも 説明が欲しい。
29.
Copyright (C) 2019
OGIS-RI All rights reserved. 紛らわしい名称(アプリケーションとドメイン) ? Worker?覧を取得するためのAPIに「domain」という情報が必要である。 – https://anypoint.mulesoft.com/cloudhub/api/v2/applications/{domain} ? この「domain」に設定する値は、管理コンソールではアプリケーション名に該当する。 – 管理コンソールで「domain」というとフルドメインを指す。 ? 担当者間で同じものを指しているはずなのに、「ドメイン」と「アプリケーション名」で呼び?が 異なり、共通認識を得るために?間がかかった。 管理コンソールで 「domain」といえば フルドメインを指す APIの「domain」に 設定すべき値
30.
Copyright (C) 2019
OGIS-RI All rights reserved. 紛らわしい名称(Workerとインスタンス) ? 管理コンソールではWorkerと表されているものが、APIではインスタンスと表されている。こち らも担当者間で共通認識を得るための阻害要因となった。 APIではデプロイメン ト一覧を取得すると、 インスタンスという 名称で結果が取得で きる。 CludHubではデプロ イメントに紐づくの はWorkerである。
31.
Copyright (C) 2019
OGIS-RI All rights reserved. MuleSoftのドキュメントページエラー ? MuleSoftのドキュメントを閲覧していると、たまに発?する。 ? しばらくすると、また閲覧可能になる。 参考URL https://docs.mulesoft.com/general/
32.
まとめ
33.
Copyright (C) 2019
OGIS-RI All rights reserved. まとめ ? CloudHubには便利なAPIがあるため、ログバックアップを簡単に作成することができた。 – 今回はAWS Lambdaで作成したが、他のプラットフォームでもサクッと作れる。 ? バックアップシステムを作成する上で、気をつけないといけない点があるため注意が必要であ る。 APIを利用して 自動化していきましょう!
34.
付録
35.
Copyright (C) 2019
OGIS-RI All rights reserved. Lambda実?に必要な権限 ? ロブバックアップを実?しているLambda ユーザーの権限 { "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:*:*:*" ], "Effect": "Allow" }, { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::*/*" ] } ] }
36.
Copyright (C) 2019
OGIS-RI All rights reserved. 使?したCloud API?覧 API名 役割 エンドポイント 説明URL ログインAPI APIを使用するた めのアクセストー クンを発行する https://anypoint.mulesoft.com/accounts/login https://anypoint.mulesoft.com/exchange/portals/anypoin t-platform/f1e97bc6-315a-4490-82a7- 23abe036327a.anypoint-platform/access-management- api/minor/1.0/pages/Authentication/ ログイン者情 報API 自分が所属してい る組織IDを取得す る https://anypoint.mulesoft.com/accounts/api/me https://anypoint.mulesoft.com/exchange/portals/anypoin t-platform/f1e97bc6-315a-4490-82a7- 23abe036327a.anypoint-platform/access-management- api/minor/1.0/console/method/%233262/ 環境一覧取得 API 環境一覧から環境 IDを取得する https://anypoint.mulesoft.com/accounts/api/organ izations/{orgId}/entitlements https://anypoint.mulesoft.com/exchange/portals/anypoin t-platform/f1e97bc6-315a-4490-82a7- 23abe036327a.anypoint-platform/access-management- api/minor/1.0/console/method/%233725/ デプロイ一覧 API デプロイされてい るWorker一覧を 取得する https://anypoint.mulesoft.com/cloudhub/api/v2/a pplications/{domain}/deployments https://anypoint.mulesoft.com/exchange/portals/anypoin t-platform/f1e97bc6-315a-4490-82a7- 23abe036327a.anypoint-platform/cloudhub- api/minor/1.0/console/method/%232194/ ログ取得API Workerのログを 取得する https://anypoint.mulesoft.com/cloudhub/api/v2/a pplications/{domain}/instances/{instanceId}/logs https://anypoint.mulesoft.com/exchange/portals/anypoin t-platform/f1e97bc6-315a-4490-82a7- 23abe036327a.anypoint-platform/cloudhub- api/minor/1.0/console/method/%232317/
Download