Instana dynamic agentのバージョンを下げる

# はじめに
Instana ホストエージェントはdynamicとstaticの2つの[タイプ][1]があります。dynamicエージェントでは、エージェントを自動更新する機能があるので、基本的にはメンテナンスフリーで運用することができます。

ここでは、何かしらの理由により、Instana dynamic agentを最新ではなく、以前のリリースに下げて使用したい場合を想定して、バージョンを下げていきます。

[1]:https://www.ibm.com/docs/en/instana-observability/current?topic=instana-host-agent#host-agent-types

検証に使用した環境は以下です。
- Instana Backend: Self-Hosted(Single) Build 227
- Instana Agentインストール先のOS: CentOS 7.9 

Instana Agentのバージョンの詳細は以下の通りです。
```bash
[root@host instana]# curl localhost:42699/version
Name                                                 │ Version │ State
─────────────────────────────────────────────────────┼─────────┼─────────
Instana - Agent - GitOps - Discovery                 │ 1.1.3   │ Active
Instana - Agent - Bootstrap - Bundle                 │ 1.2.18  │ Active
Instana - Agent - Bundle                             │ 1.1.647 │ Active
Instana - Agent - API                                │ 1.0.0   │ Active
Instana - Agent - Init                               │ 1.0.2   │ Active
Instana - Sensor - API - JSON                        │ 1.2.117 │ Active
Instana - Agent - Netty anti leak                    │ 1.0.0   │ Active
Instana - Agent - Optional API                       │ 1.0.0   │ Active
Java Concurrency Tools Core Library                  │ 2.1.1   │ Active
Instana - Sensor - API - Interfaces                  │ 1.2.117 │ Active
Instana - Agent - Unix Socket Util                   │ 1.2.3.0 │ Active
Instana - IBM ACE - Discovery                        │ 1.0.39  │ Active
(省略)
```

# Instana Agentのバージョンについて
Instanaのdynamicエージェントは**ブート・バージョン(bootstrap)** と、**エージェントバージョン**が分かれて保持されています。

**ブート・バージョン**はエージェント起動時に使用するコンポーネントのバージョンで、エージェントインストール時に最新版が導入されますが、日々の自動更新ではアップデートされません。明確な指示がない限り、そのまま古いバージョンを使用していても問題ありません。

**エージェントバージョン**はエージェント本体とセンサー群のリリースを表すバージョンです。自動更新によりアップデートされ、最新のリリースの場合には、Backend UI上で`Latest`と表示されます。一方で、エージェントバージョンが最新でない場合には、SHA値で表示されます。このSHA値は[こちら][2]で確認可能です。
![スクリーンショット 2022-08-09 12.01.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/319123/e80fc19f-331b-40e2-d14a-f1091bbbac0b.png)

[2]:https://github.com/instana/agent-updates/commits


# Instana Agentのバージョンを指定（固定）する
[ドキュメント][3]に記載されている通り、dynamicエージェントのバージョンをpinning(固定)することができます。この機能は、自動更新を適用せずに指定のバージョンを使い続ける際に使用するものですが、過去バージョンを指定すると、そのバージョンで構成された上で固定されます。つまり、バージョンを下げることができます。

デフォルトでは、設定ファイルはありませんので、templateファイルをコピーして設定します。

[3]:https://www.ibm.com/docs/en/instana-observability/current?topic=agent-updates-dynamic-host-agents#version-pinning

```bash
[root@host ~]# cd /opt/instana/agent/etc/instana
[root@host instana]# cp -p com.instana.agent.bootstrap.AgentBootstrap.cfg.template com.instana.agent.bootstrap.AgentBootstrap.cfg
[root@host instana]# vi com.instana.agent.bootstrap.AgentBootstrap.cfg
```

versionの行を追加します。(`+`はdiff表現のため不要です。念の為。)
上述の通り、SHA値で指定します。過去のCommitのSHA値を指定すると、バージョンを下げることになります。
```diff_shell
# This field specifies which version set of components should be used by the agent;
# its value must be a valid commit hash from https://github.com/instana/agent-updates/commits/public
# This agent uses dynamic updates
# version = <sha-1>
+ version = 066e1361fc90fb093d35703d75c5b8a0f1fa767e

origin = package dynamic
```

:::note warn
エージェントのサポートはリリースから6ヶ月間ですのでご注意ください。
詳細は[サポートポリシー][4]をご確認ください。
:::

[4]:https://www.ibm.com/docs/en/instana-observability/current?topic=policies

# Instana Agentを再起動する
指定したバージョンで動作するように、dynamicエージェントを再起動します。
```bash
[root@host instana]# systemctl stop instana-agent
[root@host instana]# systemctl start instana-agent
```

エージェントのログにpinされたバージョンで動作している旨が出力されます。
```bash
[root@host instana]# grep pinned /opt/instana/agent/data/log/agent.log 
2022-08-08T19:18:59.039-05:00 | INFO  | features-3-thread-1              | AgentBootstrap   | com.instana.agent-bootstrap - 1.2.18 | Dynamic agent running pinned version 066e1361fc90fb093d35703d75c5b8a0f1fa767e and installed from package dynamic
```

改めてバージョンを確認すると、バージョンが一部下がっていることが確認できます。
```bash
[root@host instana]# curl localhost:42699/version
Name                                                 │ Version │ State
─────────────────────────────────────────────────────┼─────────┼─────────
Instana - Agent - GitOps - Discovery                 │ 1.1.3   │ Active
Instana - Agent - Bootstrap - Bundle                 │ 1.2.18  │ Active
Instana - Agent - Bundle                             │ 1.1.644 │ Active
Instana - Agent - Init                               │ 1.0.2   │ Active
Instana - Sensor - API - JSON                        │ 1.2.117 │ Active
Instana - Agent - Optional API                       │ 1.0.0   │ Active
Java Concurrency Tools Core Library                  │ 2.1.1   │ Active
Instana - Sensor - API - Interfaces                  │ 1.2.117 │ Active
Instana - Agent - Unix Socket Util                   │ 1.2.3.0 │ Active
Instana - IBM ACE - Discovery                        │ 1.0.36  │ Active
（省略）
```

# おわりに
使う機会があまりないと思いますが（無いことを祈ります）、参考になれば幸いです。