特定のプロセスだけをInstanaの可視化対象から外すTips

# はじめに
Instana は 対象ホストにAgentを導入するだけで**自動的にアプリやインフラの可視化を実現できます。**（全部ではないですけど）いやぁ楽ですよね。
…なんですが、たまに「このプロセスは別に可視化しなくて良いのだけど…されちゃうのね」みたいなことってあるじゃないですか。ちょっとしたポーリング用プロセスとか？
いや全部可視化しとけば良いじゃないですか、というのが Observability的には良いと個人的には思うものの、やっぱり人間が扱うものは例外もあるもの。
というわけで、特定のプロセスだけを可視化対象から外す方法を検証してみました。

## 要約
こちらを読みましょう。そして設定してみましょう。

https://www.ibm.com/docs/ja/instana-observability/current?topic=cha-configuring-host-agents-by-using-agent-configuration-file#ignoring-processes

## 監視対象アプリケーションの稼働
### アプリケーション自体の説明
今回、アプリケーション自体はサンプル検証用の適当なものなので、説明は省きます。
以下をご参照ください。なんとなく Spring Bootにしてみました。

https://github.com/tty-kwn/springboot-sampleapp

### アプリの開始
Sprint Bootで処理を実行します。
```
./mvnw spring-boot:run
```

ちなみに、Spring Boot開始後に、Springを起動しているコンソールに以下が表示されていました。
Instana Java AgentがJavaアプリケーションに組み込まれる時にこんな警告が出るようになったんですね。

```
WARNING: A Java agent has been loaded dynamically (/tmp/.instana/javaagent-loader-1.3.64.jar)
WARNING: If a serviceability tool is in use, please run with -XX:+EnableDynamicAgentLoading to hide this warning
WARNING: If a serviceability tool is not in use, please run with -Djdk.instrument.traceUsage for more information
WARNING: Dynamic loading of agents will be disallowed by default in a future release
```

この警告を表示したくない人は java の引数に `XX:+EnableDynamicAgentLoading` を指定してください。
将来のリリースで、dynamic loadingはデフォルトで不許可になるらしい。。。対策は明示的に上記引数を指定することなんだろうか…

### アプリの呼び出し
以下を実行して、永遠にアクセスしていることにします。
```
while true
> do
>   sleep 1
>   curl http://localhost:8080/cpu/load
> done
```

こんな感じの結果がコンソールに出ます。
```
CPU Load Task ExecutedCPU Load Task ExecutedCPU Load Task ExecutedCPU Load Ta...
```

### Instanaでの可視化
#### インフラ
ホスト上でSpringBootプロセス：JVM(tomcat)認識してますね
![スクリーンショット 2024-12-22 1.05.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/5aade0d6-542e-06a5-eaeb-2bf928597362.png)

tomcatのメトリックも確認できます
![スクリーンショット 2024-12-22 1.05.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/7e8cd957-4d53-71bb-2788-5e29149c40a5.png)

#### アプリケーション
スタックから辿ってアプリを表示することもできます
![スクリーンショット 2024-12-22 1.07.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/5c1fb436-9b3f-17e3-ae63-3100f329edff.png)

## Sprint Bootプロセスを可視化対象から外す
### Spring Boot プロセス の確認
Spring Boot プロセスは `ps aux |grep java` で状況を確認できます。

```
/usr/lib/jvm/java-21-openjdk-21.0.5.0.10-3.el8.x86_64/bin/java 
-XX:TieredStopAtLevel=1 (中略) com.example.cpuusage.CpuUsageApplication
```

Instana上でも、引数が可視化されていることが確認できます。
![スクリーンショット 2024-12-22 1.17.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/4609bb4b-8df4-15cc-3558-0db78445c619.png)

### Instana Agent設定ファイルの変更
Instana Agent設定ファイルで不可視対象設定を記載します。
設定ファイルデフォルトは `/opt/instana/agent/etc/instana/configuration.yaml` です。
`java`プロセスで引数に`--instana.ignored=true`を持つものを不可視対象にします。
```yaml
com.instana.ignore:
  processes:
    - 'java'
  arguments:
    - '--instana.ignored=true'
```

### Spring Boot アプリ 引数の追加
Spring Bootアプリに引数を追加して実行します。

```
./mvnw spring-boot:run -Dspring-boot.run.arguments=--instana.ignored=true
```
参考：https://www.baeldung.com/spring-boot-command-line-arguments

### Instana での確認
数分待つと、、、 インフラ画面でJVM(tomcat)が一番下にあったのですが、表示が消えていますね！
![スクリーンショット 2024-12-22 1.26.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/2509bf3e-e0af-2d47-f250-b54fd03d6650.png)

tomcatアプリケーション自身は過去の情報があるため消えていませんが、**トレース情報が一切取得されていない**ことを確認できますね！確実に監視対象外になっていそうです！
![スクリーンショット 2024-12-22 1.33.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224464/7e703c91-6613-f85c-2305-f8ec5b4ef9e8.png)



## 最後に
これで、表示したくないプロセスを表示しなくてよくなりましたね！