Private Space Logging
この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。
最終更新日 2023年04月20日(木)
Table of Contents
Private Space Logging は Shield Private Space でのみ利用できます。
Private Space Logging は、アプリレベルではなく Space レベルでのログキャプチャを設定する機能です。Private Space Logging を有効にすると、Space 内のアプリケーション、Heroku Postgres データベース、および Heroku システムサービスからのすべてのログイベントが 1 つのログキャプチャ記録先に転送されます。Space 操作に関連する Heroku API ログもこの同じ記録先に送信されます。Space のログ記録設定とその変更は、管理者のアクセス許可を持つユーザーだけが実行できます。Private Space Logging を有効にした後、Space 内のアプリに対して異なるログ記録先を設定することはできません。
Space レベルでログ記録を管理することには、いくつかの利点があります。
- 開発者がログの設定を扱う必要がありません。
- Space 内のすべてのアプリでログ設定の一貫性が保証されます。いずれかのアプリで誤ってログのキャプチャを忘れたり、独自の記録先にログを送信したりする可能性を排除できます。
- 監査担当者は、Space でログ記録が正しく設定されていることを容易に監査できます。また監査担当者は、開発者が Space 内でアプリを追加および削除してもログ設定が正しいままであることの確証が得られます。
さらに、Private Space Logging を使用すると、ログデータの局所性の制御が向上します。
Private Space Logging を有効にする
Private Space Logging は、Space を作成するときに有効にします。有効にするには、Space の作成時に 「Log Drain URL」 (ログドレイン URL) を指定します。
$ heroku spaces:create acme-space --shield --team my-team --log-drain-url https://somename:somesecret@loghost.example.com/logpath
Shield Space の作成時にログドレインを指定しない場合、その Shield Private Space では Private Space Logging が有効にならないため、この機能によってもたらされる、コンプライアンスとデータの所在に関連した機能強化の恩恵は受けられません。
Space を作成した後に Private Space Logging をオンにすることはできません。ただし、Private Space Logging を有効にして Space を作成した場合に、後からログドレイン URL を変更することは可能です。
ログ記録設定をチェックする
drains:get
コマンドを使用して、現在の Space のログ設定を取得できます。この Space の作成時に Private Space Logging を設定しなかった場合、コマンドは This Private Space does not support direct logging.
(この Private Space は直接ログ記録をサポートしていない) という警告を返します。
$ heroku drains:get --space acme-space
https://loghost.example.com/logpath (<id>)
Space のログ記録設定を変更する
次のコマンドを使用して、いつでも Space のログ記録先を更新できます。
heroku drains:set <log-drain-url> --space <space>
Space のドレイン URL を更新するには、関連付けられた Heroku アカウントに対する管理者のアクセス許可が必要です。
ログ記録の形式
リクエスト
ログは HTTPS POST リクエストとして送信されます。
各リクエスト本体には最大 500 ログ行を含めることができます。 ログバッチが 500 ログ行に達するか、250 ミリ秒が経過するかのいずれか早い方で、Private Space Logging からログドレインにリクエストが送信されます。
ログ行の最大の長さは 10 KB で、それよりも長い行は複数行に分割されます。
つまり、実際にはまずありませんが、Private Space Logging リクエストは最大で 5000 KB に達する可能性があります。 サードパーティのログ記録プロバイダーを使用する場合は、各プロバイダーのログ記録リクエストのサイズ制限を確認してください。
リクエスト本体
リクエスト本体は、RFC6587 に基づいた一連の syslog 形式メッセージです。リクエストの例を次に示します。
POST /logs HTTP/1.1
Host: example.com
Content-Type: application/logplex-1
Logplex-Msg-Count: 10
User-Agent: log-shuttle/x (y; z; w; v)
Content-Length: 2660
266 <190>1 2017-03-15T16:10:27.008803+00:00 11844141-29d5-4425-9fd8-894759ae0dc7 heroku web.1 - - source=web.1 dyno=heroku.11844141-29d5-4425-9fd8-894759ae0dc7.91bd5d7c-b12c-47a0-9d67-daef0e4aca96 sample#load_avg_1m=0.00 sample#load_avg_5m=0.00 sample#load_avg_15m=0.00
391 <190>1 2017-03-15T16:10:27.009270+00:00 11844141-29d5-4425-9fd8-894759ae0dc7 heroku web.1 - - source=web.1 dyno=heroku.11844141-29d5-4425-9fd8-894759ae0dc7.91bd5d7c-b12c-47a0-9d67-daef0e4aca96 sample#memory_total=8.15MB sample#memory_rss=3.95MB sample#memory_cache=2.66MB sample#memory_swap=0.00MB sample#memory_pgpgin=2603pages sample#memory_pgpgout=1423pages sample#memory_quota=2560.00MB
266 <190>1 2017-03-15T16:10:57.008773+00:00 11844141-29d5-4425-9fd8-894759ae0dc7 heroku web.1 - - source=web.1 dyno=heroku.11844141-29d5-4425-9fd8-894759ae0dc7.91bd5d7c-b12c-47a0-9d67-daef0e4aca96 sample#load_avg_1m=0.00 sample#load_avg_5m=0.00 sample#load_avg_15m=0.00
391 <190>1 2017-03-15T16:10:57.009215+00:00 11844141-29d5-4425-9fd8-894759ae0dc7 heroku web.1 - - source=web.1 dyno=heroku.11844141-29d5-4425-9fd8-894759ae0dc7.91bd5d7c-b12c-47a0-9d67-daef0e4aca96 sample#memory_total=8.15MB sample#memory_rss=3.95MB sample#memory_cache=2.66MB sample#memory_swap=0.00MB sample#memory_pgpgin=2603pages sample#memory_pgpgout=1423pages sample#memory_quota=2560.00MB
266 <190>1 2017-03-15T16:11:27.008840+00:00 11844141-29d5-4425-9fd8-894759ae0dc7 heroku web.1 - - source=web.1 dyno=heroku.11844141-29d5-4425-9fd8-894759ae0dc7.91bd5d7c-b12c-47a0-9d67-daef0e4aca96 sample#load_avg_1m=0.00 sample#load_avg_5m=0.00 sample#load_avg_15m=0.00
391 <190>1 2017-03-15T16:11:27.009436+00:00 11844141-29d5-4425-9fd8-894759ae0dc7 heroku web.1 - - source=web.1 dyno=heroku.11844141-29d5-4425-9fd8-894759ae0dc7.91bd5d7c-b12c-47a0-9d67-daef0e4aca96 sample#memory_total=8.15MB sample#memory_rss=3.95MB sample#memory_cache=2.66MB sample#memory_swap=0.00MB sample#memory_pgpgin=2603pages sample#memory_pgpgout=1423pages sample#memory_quota=2560.00MB
266 <190>1 2017-03-15T16:11:57.008775+00:00 11844141-29d5-4425-9fd8-894759ae0dc7 heroku web.1 - - source=web.1 dyno=heroku.11844141-29d5-4425-9fd8-894759ae0dc7.91bd5d7c-b12c-47a0-9d67-daef0e4aca96 sample#load_avg_1m=0.00 sample#load_avg_5m=0.00 sample#load_avg_15m=0.00
391 <190>1 2017-03-15T16:11:57.009221+00:00 11844141-29d5-4425-9fd8-894759ae0dc7 heroku web.1 - - source=web.1 dyno=heroku.11844141-29d5-4425-9fd8-894759ae0dc7.91bd5d7c-b12c-47a0-9d67-daef0e4aca96 sample#memory_total=8.15MB sample#memory_rss=3.95MB sample#memory_cache=2.66MB sample#memory_swap=0.00MB sample#memory_pgpgin=2603pages sample#memory_pgpgout=1423pages sample#memory_quota=2560.00MB
各メッセージの先頭は番号とスペースです。数字は、スペースよりも後のメッセージの残り部分の長さを示します。メッセージの残り部分は、RFC5424 に従って syslog メッセージとしてフォーマットされます。次の要素があります。
- 山かっこで囲まれた “PRIVAL” の数字。この数字は、syslog ファシリティ番号と syslog 重大度番号の 8 進数合計です。
- 山かっこの直後のバージョン番号。
- 実際のログメッセージの内容。Heroku のログには複数の種類がありますが、そのいずれかです。
これは、Logplex でログメッセージの受信に使用する形式と同じです。完全な ABNF 定義を含め、形式についての詳細は、RFC 5424 を参照してください。
特定の Heroku アプリからのログメッセージを検索する
アプリ、実行時コントロールプレーン、および Heroku ルーターから Private Space Logging を経由してログメッセージが送信される場合、各メッセージの最初の要素は Heroku アプリ UUID になります。たとえば、前出のサンプル内のメッセージは、UUID が 11844141-29d5-4425-9fd8-894759ae0dc7
であるアプリケーションからのものです。Heroku アプリの UUID は、heroku info
で --json
オプションを使用して確認できます。
$ heroku info -a myapp --json
{
...,
"app": {
...,
"id": "1234abcd-352a-4931-1234-1bb5e6f4afa2",
...
}
}
データの所在
Private Space Logging が有効になっているとき、ログデータはソースから直接、設定されたログ記録先に送信されます。Logplex 経由でルーティングされることはありません。これにより、データの所在の制御が向上します。たとえば、Private Space がフランクフルトにあり、ログ記録先もフランクフルトにある場合、ログデータは標準のインターネットルーティングを経由して記録先に直接送信されます。他の Heroku サービス経由でルーティングされることはありません。
一部の Heroku サービスは、Private Space と同じ場所に配置されません。Heroku API や Heroku Build は、グローバルサービスの例です。これらのサービスは、それぞれが配置されている場所から、Space で設定されているログの記録先に直接、ログを送信します。したがって、データの所在は、Space 内に存在するアプリケーションおよびサービスから送信されるログデータにしか適用されません。これらのサービスには実行時コントロールプレーンや HTTP プロキシ、また Heroku Private Postgres、Private Redis、Private Kafka などの Space 内データサービスが含まれます。
Heroku が利用しているサブプロセッサーの一覧と Heroku データが保存され、処理されている国の一覧については、「Salesforce Infrastructure & Sub-processors」 (Salesforce のインフラストラクチャとサブプロセッサー) ドキュメントを参照してください。
ログをキャプチャする
前述した HTTPS ベースのログ記録形式をサポートする任意のログ記録サービスにログを転送できます。これには、クラウドサービスプロバイダー、既存のログプラットフォームのローカルインスタンス、または、ログを格納またはルーティングする方法をプログラムで決定する独自のログキャプチャサービスが含まれます。
ログドレインの記録先は、パブリックに解決およびアドレス指定可能な URL である必要があります。Space 内部の URL や、(たとえば) ピアリングされた VPC 内のプライベート URL は指定できません。Heroku Private Space 本体の外にある (Heroku Data や Heroku API などの) コンポーネントも、ドレインの記録先にログを送信します。また、URL を解決できる必要があります。
Splunk
Splunk Enterprise では、HTTP Event Collector と RFC5424 Syslog アドオンを使用して Private Space のログを取り込むことができます。
RFC5424 Syslog アドオンをインストールします。
新しい HTTP Event Collector トークンを作成します。Splunk のドキュメントに従って、次のようにフィールドに入力します。
- Name: Space の名前またはその他の一意識別子。イベントを区別するために、Space ごとにトークンを作成することをお勧めします。
- Source Type:
rfc5424_syslog
上記の手順で作成したトークンとチャネルを使用して、ログドレイン URL を作成します。
https://x:TOKEN@yoursplunkhost.example.com:yourport/services/collector/raw?channel=CHANNEL
次に例を示します。
https://x:1234ABCD-C66E-4B22-854F-5958C7FA637D@yoursplunkhost.domain.com:yourport/services/collector/raw?channel=12341238-adbd-abcd-9dbe-16629695fb1d
前に説明したように、Private Space でログドレイン URL を設定します。
Sumo Logic
Sumo Logic にログを送信するように Heroku Shield Private Space を設定するには、次の手順に従います。
- ログを生成するアプリを Heroku で作成します。
- Heroku CLI がインストールされていることを確認します。
- Sumo Logic の Hosted Collector に HTTP ソースを設定します。
- 作成した HTTP ソースの URL として Heroku ログドレインを指定します。
詳細は、こちらの Sumo Logic の記事を参照してください。
LogDNA
ログを LogDNA に送信するように Heroku Shield Private Space を設定するには、次の手順を実行します。
Heroku CLI がインストールされていることを確認します。
www.logdna.com にアクセスし、
Get Started
(開始する) ボタンをクリックしてアカウントを作成します。登録メール内のリンクをクリックしてメールアドレスを確認し、LogDNA アカウントのパスワードを設定します。
LogDNA Web アプリを開き、
All Hosts > Add a host
(すべてのホスト > ホストを追加) をクリックします。Heroku セクションに移動し、Installing via Heroku Log Drains (Heroku ログドレインからインストール) セクションにあるアカウント固有のコマンドを実行します。
これで、アプリケーションのログを LogDNA Web アプリで確認できるようになります。
Coralogix
ログを Coralogix に送信するように Heroku Shield Private Space を設定するには、次の手順を実行します。
Coralogix でアカウントを作成します。
Settings → Send Your Logs (設定 → ログの送信) を選択して、新しいアカウントの秘密鍵と会社 ID を取得します。ログに関連付けるアプリケーション名を選択します。
Heroku ログドレインの URL を次のように指定します:
https://(redacted)@api.coralogix.com/logs/heroku/private?appName=
Coralogix へのログストリームを監視します。詳細は、Coralogix チュートリアルを参照してください。
カスタムのログキャプチャサービスを実行する
log-iss は、オープンソースのログキャプチャサービスの実装です。Go で記述されており、任意の syslog 記録先にログを転送できます。このアプリケーションは、Heroku またはその他の任意のインフラストラクチャで実行できます。ログを ElasticSearch に転送したり、S3 のファイルシステムストアに保存したりするために、コードをフォークしてカスタマイズすることができます。
Private Space Logging の制限
Logplex の機能を使用できない
Private Space Logging が有効なとき、ログメッセージはログの記録先に直接送信され、Logplex によっては処理されません。したがって、Private Space Logging が有効なときは、Logplex によって提供される機能は利用できません。これらには以下のものが含まれます。
- 複数のログドレインにログを転送できません。
- CLI で
heroku logs
を使用して、またはダッシュボードのログビューアーでログを表示できません。
プライベート接続経由でしかアクセスできないドレインへのログ記録は Private Space Logging でサポートされていない
(Splunk などの) オンプレミスのログ記録システムと、オンプレミスネットワークから Private Space への VPN 接続がある場合、Private Space Logging はプライベート接続経由でオンプレミスのログ記録システムにアクセスできません。 オンプレミスのログ記録システムは、パブリックインターネットに公開されている必要があります。