Skip to content

Commit 57e6ccf

Browse files
authored
Merge pull request #433 from gentksb/translate/1-automatic-discovery
Japanese Translation: NINJA-Workshop/1-automatic-discovery
2 parents 510835b + 16462cc commit 57e6ccf

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+1350
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
---
2+
title: OpenTelemetry Collector のインストール
3+
linkTitle: 1. OpenTelemetry Collector
4+
weight: 1
5+
---
6+
7+
Splunk OpenTelemetry Collector は、インフラストラクチャとアプリケーションの計装における中核コンポーネントです。その役割は以下のデータを収集して送信することです:
8+
9+
* インフラストラクチャメトリクス(ディスク、CPU、メモリなど)
10+
* Application Performance Monitoring (APM) トレース
11+
* プロファイリングデータ
12+
* ホストおよびアプリケーションのログ
13+
14+
{{% notice title="既存の OpenTelemetry Collector の削除" style="warning" %}}
15+
Splunk IM ワークショップを完了している場合は、続行する前に Kubernetes で実行中の Collector を削除してください。以下のコマンドを実行して削除できます:
16+
17+
``` bash
18+
helm delete splunk-otel-collector
19+
```
20+
21+
EC2 インスタンスには、古いバージョンの Collector がすでにインストールされている場合があります。Collector をアンインストールするには、以下のコマンドを実行してください:
22+
23+
``` bash
24+
curl -sSL https://dl.signalfx.com/splunk-otel-collector.sh > /tmp/splunk-otel-collector.sh
25+
sudo sh /tmp/splunk-otel-collector.sh --uninstall
26+
```
27+
28+
{{% /notice %}}
29+
30+
インスタンスが正しく設定されていることを確認するために、このワークショップに必要な環境変数が正しく設定されているか確認する必要があります。ターミナルで以下のコマンドを実行してください:
31+
32+
``` bash
33+
. ~/workshop/petclinic/scripts/check_env.sh
34+
```
35+
36+
出力で、以下のすべての環境変数が存在し、値が設定されていることを確認してください。不足している場合は、インストラクターに連絡してください:
37+
38+
```text
39+
ACCESS_TOKEN
40+
REALM
41+
RUM_TOKEN
42+
HEC_TOKEN
43+
HEC_URL
44+
INSTANCE
45+
```
46+
47+
これで Collector のインストールに進むことができます。インストールスクリプトには、いくつかの追加パラメータが渡されます:
48+
49+
* `--with-instrumentation` - Splunk ディストリビューションの OpenTelemetry Java からエージェントをインストールします。これにより、PetClinic Java アプリケーションの起動時に自動的にロードされます。設定は不要です!
50+
* `--deployment-environment` - リソース属性 `deployment.environment` を指定された値に設定します。これは UI でビューをフィルタリングするために使用されます。
51+
* `--enable-profiler` - Java アプリケーションのプロファイラを有効にします。これによりアプリケーションの CPU プロファイルが生成されます。
52+
* `--enable-profiler-memory` - Java アプリケーションのプロファイラを有効にします。これによりアプリケーションのメモリプロファイルが生成されます。
53+
* `--enable-metrics` - Micrometer メトリクスのエクスポートを有効にします
54+
* `--hec-token` - Collector が使用する HEC トークンを設定します
55+
* `--hec-url` - Collector が使用する HEC URL を設定します
56+
57+
``` bash
58+
curl -sSL https://dl.signalfx.com/splunk-otel-collector.sh > /tmp/splunk-otel-collector.sh && \
59+
sudo sh /tmp/splunk-otel-collector.sh --realm $REALM -- $ACCESS_TOKEN --mode agent --without-fluentd --with-instrumentation --deployment-environment $INSTANCE-petclinic --enable-profiler --enable-profiler-memory --enable-metrics --hec-token $HEC_TOKEN --hec-url $HEC_URL
60+
```
61+
62+
次に、Collector にパッチを適用して、AWS インスタンス ID ではなくインスタンスのホスト名を公開するようにします。これにより、UI でのデータのフィルタリングが容易になります:
63+
64+
``` bash
65+
sudo sed -i 's/gcp, ecs, ec2, azure, system/system, gcp, ecs, ec2, azure/g' /etc/otel/collector/agent_config.yaml
66+
```
67+
68+
`agent_config.yaml` にパッチを適用したら、Collector を再起動する必要があります:
69+
70+
``` bash
71+
sudo systemctl restart splunk-otel-collector
72+
```
73+
74+
インストールが完了したら、**Hosts with agent installed** ダッシュボードに移動して、ホストからのデータを確認できます。**Dashboards → Hosts with agent installed** の順に移動してください。
75+
76+
ダッシュボードフィルタを使用して `host.name` を選択し、ワークショップインスタンスのホスト名を入力または選択してください(これはターミナルセッションのコマンドプロンプトから取得できます)。ホストのデータが流れていることを確認したら、APM コンポーネントの作業を開始する準備が整いました。
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
---
2+
title: Spring PetClinic アプリケーションのビルド
3+
linkTitle: 2. PetClinic のビルド
4+
weight: 2
5+
---
6+
7+
APM をセットアップするために最初に必要なのは...そう、アプリケーションです。この演習では、Spring PetClinic アプリケーションを使用します。これは、Spring フレームワーク(Springboot)で構築された非常に人気のあるサンプル Java アプリケーションです。
8+
9+
まず、PetClinic の GitHub リポジトリをクローンし、その後アプリケーションのコンパイル、ビルド、パッケージ化、テストを行います:
10+
11+
```bash
12+
git clone https://github.com/spring-projects/spring-petclinic
13+
```
14+
15+
`spring-petclinic` ディレクトリに移動します:
16+
17+
<!--
18+
```bash
19+
cd spring-petclinic && git checkout 276880e
20+
```
21+
-->
22+
23+
```bash
24+
cd spring-petclinic
25+
git checkout b26f235250627a235a2974a22f2317dbef27338d
26+
```
27+
28+
Docker を使用して、PetClinic が使用する MySQL データベースを起動します:
29+
30+
```bash
31+
docker run -d -e MYSQL_USER=petclinic -e MYSQL_PASSWORD=petclinic -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=petclinic -p 3306:3306 docker.io/biarms/mysql:5.7
32+
```
33+
34+
次に、PetClinic アプリケーションにシンプルなトラフィックを生成する Locust を実行する別のコンテナを起動します。Locust は、Web アプリケーションにトラフィックを生成するために使用できるシンプルな負荷テストツールです。
35+
36+
```bash
37+
docker run --network="host" -d -p 8090:8090 -v ~/workshop/petclinic:/mnt/locust docker.io/locustio/locust -f /mnt/locust/locustfile.py --headless -u 1 -r 1 -H http://127.0.0.1:8083
38+
```
39+
40+
次に、`maven` を使用して PetClinic をコンパイル、ビルド、パッケージ化します:
41+
42+
```bash
43+
./mvnw package -Dmaven.test.skip=true
44+
```
45+
46+
> [!INFO]
47+
> 初回実行時は数分かかり、アプリケーションをコンパイルする前に多くの依存関係をダウンロードします。以降のビルドはより高速になります。
48+
49+
ビルドが完了したら、実行しているインスタンスのパブリック IP アドレスを取得する必要があります。以下のコマンドを実行して取得できます:
50+
51+
```bash
52+
curl http://ifconfig.me
53+
```
54+
55+
IP アドレスが返されます。アプリケーションが実行されていることを確認するために必要になるので、この IP アドレスをメモしておいてください。
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
---
2+
title: Java 向け自動ディスカバリーおよび設定
3+
linkTitle: 3. 自動ディスカバリー
4+
weight: 3
5+
---
6+
7+
以下のコマンドでアプリケーションを起動できます。`mysql` プロファイルをアプリケーションに渡していることに注目してください。これにより、先ほど起動した MySQL データベースを使用するようアプリケーションに指示します。また、`otel.service.name``otel.resource.attributes` をインスタンス名を使用した論理名に設定しています。これらは UI でのフィルタリングにも使用されます:
8+
9+
```bash
10+
java \
11+
-Dserver.port=8083 \
12+
-Dotel.service.name=$INSTANCE-petclinic-service \
13+
-Dotel.resource.attributes=deployment.environment=$INSTANCE-petclinic-env \
14+
-jar target/spring-petclinic-*.jar --spring.profiles.active=mysql
15+
```
16+
17+
`http://<IP_ADDRESS>:8083``<IP_ADDRESS>` を先ほど取得した IP アドレスに置き換えてください)にアクセスして、アプリケーションが実行されていることを確認できます。
18+
19+
Collector をインストールした際、**AlwaysOn Profiling****Metrics** を有効にするように設定しました。これにより、Collector はアプリケーションの CPU およびメモリプロファイルを自動的に生成し、Splunk Observability Cloud に送信します。
20+
21+
PetClinic アプリケーションを起動すると、Collector がアプリケーションを自動的に検出し、トレースとプロファイリングのために計装するのが確認できます。
22+
23+
{{% tab title="出力例" %}}
24+
25+
``` text {wrap="false"}
26+
Picked up JAVA_TOOL_OPTIONS: -javaagent:/usr/lib/splunk-instrumentation/splunk-otel-javaagent.jar
27+
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
28+
[otel.javaagent 2024-08-20 11:35:58:970 +0000] [main] INFO io.opentelemetry.javaagent.tooling.VersionLogger - opentelemetry-javaagent - version: splunk-2.6.0-otel-2.6.0
29+
[otel.javaagent 2024-08-20 11:35:59:730 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - -----------------------
30+
[otel.javaagent 2024-08-20 11:35:59:730 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - Profiler configuration:
31+
[otel.javaagent 2024-08-20 11:35:59:730 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - splunk.profiler.enabled : true
32+
[otel.javaagent 2024-08-20 11:35:59:731 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - splunk.profiler.directory : /tmp
33+
[otel.javaagent 2024-08-20 11:35:59:731 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - splunk.profiler.recording.duration : 20s
34+
[otel.javaagent 2024-08-20 11:35:59:731 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - splunk.profiler.keep-files : false
35+
[otel.javaagent 2024-08-20 11:35:59:732 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - splunk.profiler.logs-endpoint : null
36+
[otel.javaagent 2024-08-20 11:35:59:732 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - otel.exporter.otlp.endpoint : null
37+
[otel.javaagent 2024-08-20 11:35:59:732 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - splunk.profiler.memory.enabled : true
38+
[otel.javaagent 2024-08-20 11:35:59:732 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - splunk.profiler.memory.event.rate : 150/s
39+
[otel.javaagent 2024-08-20 11:35:59:732 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - splunk.profiler.call.stack.interval : PT10S
40+
[otel.javaagent 2024-08-20 11:35:59:733 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - splunk.profiler.include.internal.stacks : false
41+
[otel.javaagent 2024-08-20 11:35:59:733 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - splunk.profiler.tracing.stacks.only : false
42+
[otel.javaagent 2024-08-20 11:35:59:733 +0000] [main] INFO com.splunk.opentelemetry.profiler.ConfigurationLogger - -----------------------
43+
[otel.javaagent 2024-08-20 11:35:59:733 +0000] [main] INFO com.splunk.opentelemetry.profiler.JfrActivator - Profiler is active.
44+
```
45+
46+
{{% /tab %}}
47+
48+
Splunk APM UI にアクセスして、アプリケーションコンポーネント、トレース、プロファイリング、DB Query パフォーマンス、メトリクスを確認できます。左側のメニューから **APM** をクリックし、**Environment** ドロップダウンをクリックして、ご自身の環境(例:`<INSTANCE>-petclinic``<INSTANCE>` は先ほどメモした値に置き換えてください)を選択します。
49+
50+
検証が完了したら、`Ctrl-c` を押してアプリケーションを停止できます。
51+
52+
リソース属性は、報告されるすべてのスパンに追加できます。例えば `version=0.314` のように指定します。カンマ区切りのリソース属性リストも定義できます(例:`key1=val1,key2=val2`)。
53+
54+
新しいリソース属性を使用して PetClinic を再度起動しましょう。実行コマンドにリソース属性を追加すると、Collector のインストール時に定義された内容が上書きされることに注意してください。新しいリソース属性 `version=0.314` を追加しましょう:
55+
56+
```bash
57+
java \
58+
-Dserver.port=8083 \
59+
-Dotel.service.name=$INSTANCE-petclinic-service \
60+
-Dotel.resource.attributes=deployment.environment=$INSTANCE-petclinic-env,version=0.314 \
61+
-jar target/spring-petclinic-*.jar --spring.profiles.active=mysql
62+
```
63+
64+
Splunk APM UI に戻り、最近のトレースをドリルダウンすると、スパン内に新しい `version` 属性が表示されます。
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
---
2+
title: 3. Real User Monitoring
3+
weight: 3
4+
---
5+
6+
Real User Monitoring (RUM) の計装では、ページに OpenTelemetry Javascript スニペット [**https://github.com/signalfx/splunk-otel-js-web**](https://github.com/signalfx/splunk-otel-js-web) を追加します。ウィザードを使用して **Data Management → Add Integration → RUM Instrumentation → Browser Instrumentation** の順に進みます。
7+
8+
インストラクターがドロップダウンから使用するトークンを指示します。**Next** をクリックしてください。以下の形式で **App name****Environment** を入力します:
9+
10+
- `<INSTANCE>-petclinic-service` - `<INSTANCE>` を先ほどメモした値に置き換えてください。
11+
- `<INSTANCE>-petclinic-env` - `<INSTANCE>` を先ほどメモした値に置き換えてください。
12+
13+
ウィザードは、ページの `<head>` セクションの先頭に配置する必要がある HTML コードスニペットを表示します。以下は例です(このスニペットは使用せず、ウィザードが生成したものを使用してください):
14+
15+
``` html
16+
/*
17+
18+
IMPORTANT: Replace the <version> placeholder in the src URL with a
19+
version from https://github.com/signalfx/splunk-otel-js-web/releases
20+
21+
*/
22+
<script src="https://cdn.signalfx.com/o11y-gdi-rum/latest/splunk-otel-web.js" crossorigin="anonymous"></script>
23+
<script>
24+
SplunkRum.init({
25+
realm: "eu0",
26+
rumAccessToken: "<redacted>",
27+
applicationName: "petclinic-1be0-petclinic-service",
28+
deploymentEnvironment: "petclinic-1be0-petclinic-env"
29+
});
30+
</script>
31+
```
32+
33+
Spring PetClinic アプリケーションは、アプリケーションのすべてのページで再利用される単一の HTML ページを「レイアウト」ページとして使用しています。Splunk RUM 計装ライブラリを挿入するには、すべてのページで自動的に読み込まれるため、この場所が最適です。
34+
35+
それでは、レイアウトページを編集しましょう:
36+
37+
```bash
38+
vi src/main/resources/templates/fragments/layout.html
39+
```
40+
41+
次に、上記で生成したスニペットをページの `<head>` セクションに挿入します。コメントは含めず、ソース URL の `<version>``latest` に置き換えてください:
42+
43+
```html
44+
<!doctype html>
45+
<html th:fragment="layout (template, menu)">
46+
47+
<head>
48+
<script src="https://cdn.signalfx.com/o11y-gdi-rum/latest/splunk-otel-web.js" crossorigin="anonymous"></script>
49+
<script>
50+
SplunkRum.init({
51+
realm: "eu0",
52+
rumAccessToken: "<redacted>",
53+
applicationName: "petclinic-1be0-petclinic-service",
54+
deploymentEnvironment: "petclinic-1be0-petclinic-env"
55+
});
56+
</script>
57+
...
58+
```
59+
60+
コード変更が完了したら、アプリケーションを再ビルドして再度実行する必要があります。`maven` コマンドを実行して PetClinic をコンパイル/ビルド/パッケージ化します:
61+
62+
```bash
63+
./mvnw package -Dmaven.test.skip=true
64+
```
65+
66+
```bash
67+
java \
68+
-Dserver.port=8083 \
69+
-Dotel.service.name=$INSTANCE-petclinic-service \
70+
-Dotel.resource.attributes=deployment.environment=$INSTANCE-petclinic-env,version=0.314 \
71+
-jar target/spring-petclinic-*.jar --spring.profiles.active=mysql
72+
```
73+
74+
次に、ブラウザを使用してアプリケーション `http://<IP_ADDRESS>:8083` にアクセスし、実際のユーザートラフィックを生成します。
75+
76+
RUM で、上記の RUM スニペットで定義された環境にフィルタリングし、ダッシュボードをクリックして開きます。
77+
78+
RUM トレースをドリルダウンすると、スパン内に APM へのリンクが表示されます。トレース ID をクリックすると、現在の RUM トレースに対応する APM トレースに移動します。
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
---
2+
title: 4. Log Observer
3+
weight: 4
4+
---
5+
6+
Splunk Log Observer コンポーネントでは、Splunk OpenTelemetry Collector が Spring PetClinic アプリケーションからログを自動的に収集し、OTLP エクスポーターを使用して Splunk Observability Cloud に送信します。その際、ログイベントに `trace_id``span_id`、トレースフラグを付与します。
7+
8+
Log Observer は、アプリケーションとインフラストラクチャからのログをリアルタイムで表示します。ログの検索、フィルタリング、分析を行って、問題のトラブルシューティングや環境の監視が可能です。
9+
10+
PetClinic Web アプリケーションに戻り、**Error** リンクを数回クリックしてください。これにより、PetClinic アプリケーションログにいくつかのログメッセージが生成されます。
11+
12+
![PetClinic Error](../images/petclinic-error.png)
13+
14+
左側のメニューから **Log Observer** をクリックし、**Index****splunk4rookies-workshop** に設定されていることを確認してください。
15+
16+
次に、**Add Filter** をクリックし、フィールド `service.name` を検索して、値 `<INSTANCE>-petclinic-service` を選択し、`=`(include)をクリックします。これで、PetClinic アプリケーションからのログメッセージのみが表示されるはずです。
17+
18+
PetClinic アプリケーションの **Error** リンクをクリックして生成されたログエントリの1つを選択してください。ログメッセージと、ログメッセージに自動的にインジェクションされたトレースメタデータが表示されます。また、APM と Infrastructure の Related Content が利用可能であることにも注目してください。
19+
20+
![Log Observer](../images/log-observer.png)
21+
22+
これでワークショップは終了です。多くの内容をカバーしました。この時点で、メトリクス、トレース(APM と RUM)、ログ、データベースクエリパフォーマンス、コードプロファイリングが Splunk Observability Cloud に報告されているはずです。しかも、PetClinic アプリケーションのコードを変更することなく実現できました(RUM を除く)。
23+
24+
**おめでとうございます!**

0 commit comments

Comments
 (0)