Upgrade Assistantを使ってElastic Stackをバージョンアップ

Elastic Stackの8.0がリリースされてから少し経ちましたが、そろそろ7系から8系にアップグレードしようかと考えている方々も多いのではないでしょうか？そこで、メジャーアップグレード時の心強い味方、Upgrade Assistantを使って、8系へのバージョンアップについて触れておきたいと思います。

:::note info
こちらの情報は記事投稿時(2022年4月)の話です。
:::

## 8系の新機能って？
[8.0のGAは今年の2月](https://www.elastic.co/jp/blog/whats-new-elastic-8-0-0)ですが、Elastic Stack周りでざっくり言うと、以下のような機能になります。

- Lucene 9がベースに
- ネイティブな[Vector Search](https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html)と[NLP](https://www.elastic.co/guide/en/machine-learning/current/ml-nlp.html)のサポート
- [Elastic Serverless Forwarder](https://github.com/elastic/elastic-serverless-forwarder/blob/main/docs/README-AWS.md)を使った、[AWSにおけるAgentless Log Ingestion](https://www.elastic.co/blog/elastic-and-aws-serverless-application-repository-speed-time-to-actionable-insights-with-frictionless-log-ingestion-from-amazon-s3)
- [Stack Security](https://www.elastic.co/guide/en/elasticsearch/reference/current/secure-cluster.html)がデフォルトで有効化

ダウンロードしてインストールすると最初に戸惑うのは、Stack Securityがデフォルトで有効化されたことかもしれません。最早、TLSも認証もデフォルトです。また、NLP周りは[@ijokarumawak@githubさんの記事](https://qiita.com/ijokarumawak@github/items/9b0c2d650536488718a5)がとても参考になります。


## Upgrade Assistantってなに？
さて、本題の[Upgrade Assistant](https://www.elastic.co/guide/en/kibana/7.17/upgrade-assistant.html)ですが、Elastic Stackのメジャーアップグレードを行う時に、名前の通り色々とアシストしてくれる機能です。Kibanaの **Stack Management > Upgrade Assistant** から開くことができます。

## 使ってみよう
実際にUpgrade Assistantをクリックすると、次のような画面が開きます。ここでは、[Elastic Cloud](https://www.elastic.co/jp/cloud/)上のElastic Stackデプロイメントを例に取って、ステップ毎に見ていきましょう。
![Upgrade_Assistant_FirstPage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603118/84dd2833-308d-e4ce-ccda-309f3e17ad4f.png)

### 1. Back up your data
どんなアップグレードでも、**何はともあれバックアップから**、です。Elastic Cloudの場合、デフォルトスナップショットが取得されるので、最新の取得時間が表示されます。もし、直近でもう一度取得したい場合は、**Create snapshot** をクリックすると、スナップショット取得の画面が新たに開くので、そこでスナップショットを取得しましょう。
![Upgrade_Assistant_Snapshot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603118/5f0d4e76-434e-1156-e1fb-9b98b5b3cdd4.png)

### 2. Migrate system indices
ここでは、System indices、つまり"."で始まる".kibana-"のようなElasticsearchやKibanaが内部的に使うIndexが、8系に移行できるかどうかのチェックを行い、必要であれば移行に必要な処理が行われます。通常は、直ぐに *Migration complete* のチェックが付きます。

### 3. Review deprecated settings and resolve issues
このステップの裏側では、ElasticsearchのClusterやNode、Indexレベル、さらにKibanaのSettingsをチェックしています。Indexについては、8系へのアップグレードの前提として、既に7.17にバージョンアップされていることが前提になるので、Reindexは基本必要ありません。但し、6系で作成したIndexをスナップショットからリストアしたりしていると、8系と互換性がないのでReindexが必要となる場合もあります。ちなみに、6系 > 7系の時のUpgrade Assistantでは、5系で作成したIndexのReindex機能があったのですが、7系 > 8系では、その機能はなくなってました。必要に応じてDev ToolからReindexしましょう。画面では[KibanaからバッチでまとめてReindexするAPI](https://www.elastic.co/guide/en/kibana/7.17/batch-start-resume-reindex.html)が、Experimentalながらもガイドされるので、興味があれば試してみてください。

Issueがある場合は、その数が表示されるのでクリックして確認します。
![Upgrade_Assistant_Deprecation_Settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603118/de54979e-3c05-b65f-d154-be5cd1d7947c.png)

Elasticsearch、KibanaそれぞれIssueをクリックすると、その詳細や解決方法がガイドされるので、それに従って対応します。
![Deprecation_Settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603118/02d6cb7e-4ce9-0882-008d-0468cbc777a3.png)

例えば、*Setting [index.max_adjacency_matrix_filters] is deprecated* をクリックしてみましょう。
![Deprecation_Settings_Resolution.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603118/699b71ff-445f-639c-d1c6-2580b4cd5925.png)

この場合、**Remove deprecated settings** ボタンをクリックすると該当の設定が削除されて、次のように *Deprecated settings removed* にチェックが付きました。
![Deprecation_Settings_Resolved.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603118/34127656-f650-9fc9-3769-01fd9def3fd4.png)

もう一方の *Setting node.attributes.data is not recommended* は、ここでは放置でOKです。*Warning Issue* の大半は非推奨設定の指摘なので、あまり目くじらを立てる必要はないのですが、この辺りは、そのクラスタの辿ってきた歴史に応じて、様々な設定が施されているはずなので、詳しくは[公式ドキュメント](https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes.html)を参照するようにしてみて下さい。

ちなみに、Elastic Cloudの場合、変更できるClusterやNodeの設定は限定されているので、**Critical Issue** を目にすることは滅多にないと思いますが、例えばオンプレで、Stack Securityを無効にしていると、こんな風にレポートされます。8系では冒頭でも書いた通り、有効にしておく必要があるからですね。Critical Issueは、実際のアップグレード前に解決する必要があります。
![Deprecation_Settings_OnPrem.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603118/4168256d-d56c-fc8c-4a0d-5d3b68cedd9c.png)
このステップでチェックしているのは、あくまでClusterやNode、Indexの設定レベルです。アプリケーションから非推奨のAPIを叩いているかも？といったことは次のステップになります。

### 4. Address API deprecation
非推奨のAPIを使ったアプリケーションからのアクセスがないかチェックします。例えば、以下のように非推奨のAPIをDev Toolから叩いてみます。
```
GET _cat/nodes?local
```

Deprecation logにログが出力されるので、以下のように教えてくれます。
![Upgrade_Assistant_Deprecation_Log.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603118/f356191f-796e-6d8f-2d90-4d0a04bf5d40.png)

ここでは、ある期間におけるDeprecation logを検索して表示してくれています。ひとつ気をつけないといけないことは、あくまで一定期間でのありなしを表示しているので、その期間に該当するAPIによるアクセスがなければ表示されないということです。実際の詳細は、**Logアプリ** か **Discover** で確認することができます。アプリケーションの対応後、再度テストをして、Deprecation logが出なくなったことを確認したりといった使い方ができますね。
![Deprecation_Log_Logs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603118/11b922d5-9a57-7f76-52e3-a1bac0c63240.png)

### 5. Upgrade to Elastic 8.x
Elastic Cloudの場合は、**Upgrade on Cloud**をクリックすれば、Cloud UIにナビゲートされて、後は良しなにアップグレードしてくれます。

![Upgrade_Deployment.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2603118/cf47150e-8ced-b15a-1ed4-0b060cc7d9db.png)

オンプレの場合は、マニュアルでアップグレードプロセスを実行する必要がありますが、そこは挫けずに頑張りましょう。

## まとめ
メジャーアップグレードというと、ついつい気後れしてしまいがちですが、こうしたアシスタント機能を使うことで事前の確認を効率化して、作業漏れを防ぐことができます。Elastic Stackも8系になって、さらに新しい機能がどんどんリリースされてきますので、ぜひUpgrade Assistantを活用して、8系へアップグレードしていきましょう。アップグレード時の注意点は、[公式ドキュメント](https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes.html)を参考にしてみて下さい。