新エージェントツール「Elastic Agent」って一体何者? #Elastic #Elasticsearch
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
皆様、Elastic Agentってご存知でしょうか?
2020年6月にローンチされたバージョン7.8でベータ版リリースされた新しいエージェントツールになります。
以下のElastc社の公式ブログでも紹介された新機能になっています。
大きくは、以下の2点が課題となってきたのが、登場の背景のようですね。
① Beatsが7種類、他Endpoint Securityなどのエージェントが増えたことでインストール負荷が高まってきた。
② Beatsなどの各エージェントの構成管理の煩雑化と複雑化が増してきた。(AnsibleやChefとの棲み分けなど)
本投稿では、Elastic Agentで何ができるのか、無償の範囲で動作検証した結果をまとめてみました^^
【参考】
・Easier data onboarding with Elastic Agent and Ingest Manager
Elastic Agentとは
主にログ、メトリックスのデータをElasticsearchに送るためのエージェントです。
複数のBeatsを個別にインストールする手間を減らすことを目的に開発されました。
中身は、FilebeatとMetricbeat、Endpoint Securityが統合されたものになっています。
最新バージョンの7.10時点では、以下のような制約があります。
・データ出力先はElasticsearchのみ
・Filebeatのマルチラインやプロセッサなどの高度な機能は未サポート
・Elastic Agentではプロキシ未サポート
FilebeatとMetricbeatが統合されているので、Elastic Stackのモニタリング用クラスタの構築に利用出来ないか?
というのが調べてみようと思った動機でした^^;
【参考】
・Limitations of this release
Fleetとは
バージョン7.9まではIngest Managerと呼ばれていたElastic Agentの一元管理機能になります。
KibanaのUIで[Management] > [Fleet]から操作することができます。
Integrationsでは、Elastic Agentで利用可能な一部のFilebeat ModulesやMetricbeat Modulesの導入
Policiesでは、Elastic Agentに対する設定の配信などを行うことができます。(7.10では、49種類のAppsを利用可)
また、Fleetの操作には、ビルドインユーザであるelastic(super user相当)の権限が必要となるため
Elasticのセキュリティ機能を有効化する必要があります。
【参考】
・Fleet Overview
利用できる機能とサブスクリプション
- サブスクリプションで利用できるFleetに関する機能は以下の通りです。
機能 | オープンソース | ベーシック | ゴールド | プラチナ | エンタープライズ |
---|---|---|---|---|---|
Fleet app | - | ● | ● | ● | ● |
Fleet integrations | - | ● | ● | ● | ● |
Elastic Agent | - | ● | ● | ● | ● |
Selective agent binary updates | - | - | ● | ● | ● |
Selective agent policy reassignment | - | - | ● | ● | ● |
Selective agent unenrollment | - | - | ● | ● | ● |
- Elastic Agentの利用、導入やポリシーによる設定の配布は無償範囲で利用可能です。
- Elastic Agentの更新や再登録などの管理操作についてはゴールド以上の有償サブスクリプションが必要です。
余談ですが、日本語版だと最新機能についての記載が出てこないことがあります。
サブスクリプションに関するページは、以下の英語版サイトで確認しましょう!!
【参考】
・Elastic Stack subscriptions
利用環境
- GCP上に現時点における最新のElasticバージョンで環境構築しています。
項目 | パラメータ |
---|---|
Kibana version | 7.10.0 |
Elasticsearch version | 7.10.0 |
ElasticAgent version | 7.10.0 |
VM type | e2-standard-2 (vCPU2個、メモリ8GB) |
VM image | centos-7-v20201112 |
Region | us-central1 (アイオワ) |
【補足事項】
・Elasticプロダクトは全て1台のVM上に導入しています。
実施手順
- 以下の手順で設定を実施しました。
- Elasticsearchの設定
- Kibanaの設定
- Fleetの初期設定
- Elastic Agentのインストール
- Fleet integrationsの追加
【補足事項】
・本投稿では、VM作成およびElasticsearch/Kibanaのインストール手順は省略しています。
1. Elasticsearchの設定
- Elasticsearchでセキュリティ機能とAPIキー認証機能を有効化します。
$ sudo vi /etc/elasticsearch/elasticsearch.yml xpack.security.enabled: true xpack.security.authc.api_key.enabled: true
- Elasticsearchのプロセスを再起動します。
$ sudo systemctl restart elasticsearch
- ビルドインユーザのパスワードを初期化します。 (パスワードは自社の規約に沿ったものを設定ください)
$ sudo usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user. You will be prompted to enter passwords as the process progresses. Please confirm that you would like to continue [y/N] y Enter password for [elastic]: xxxxxxxxxxx (パスワードを入力) Reenter password for [elastic]: xxxxxxxxxxx (パスワードを入力) Enter password for [apm_system]: xxxxxxxxxxx (パスワードを入力) Reenter password for [apm_system]: xxxxxxxxxxx (パスワードを入力) Enter password for [kibana]: xxxxxxxxxxx (パスワードを入力) Reenter password for [kibana]: xxxxxxxxxxx (パスワードを入力) Enter password for [logstash_system]: xxxxxxxxxxx (パスワードを入力) Reenter password for [logstash_system]: xxxxxxxxxxx (パスワードを入力) Enter password for [beats_system]: xxxxxxxxxxx (パスワードを入力) Reenter password for [beats_system]: xxxxxxxxxxx (パスワードを入力) Enter password for [remote_monitoring_user]: xxxxxxxxxxx (パスワードを入力) Reenter password for [remote_monitoring_user]: xxxxxxxxxxx (パスワードを入力)
【参考】
・ビルドインユーザのパスワード初期化
・API Keyを使ったElasticsearchへのアクセス
2. Kibanaの設定
- Kibanaでセキュリティ機能の有効化、暗号化キーの設定を行います。
$ sudo vi /etc/kibana/kibana.yml xpack.security.enabled: true xpack.fleet.agents.tlsCheckDisabled: true xpack.encryptedSavedObjects.encryptionKey: "32文字以上の暗号化キー" elasticsearch.username: "kibana_system" elasticsearch.password: "上記ユーザのパスワード"
- Kibanaのプロセスを再起動します。
$ sudo systemctl restart kibana
【参考】
・Security settings in Kibana
・Fleet settings in Kibana
・Secure saved objects
3. Fleetの初期設定
- super userであるelasticをKibanaに使ってログインします。
- 左上メニューの[Management] > [Fleet]タブをクリックします。
- Fleet画面の右端にある [Settings]をクリックします。
- Elastic Agentに配布される全てのポリシーに適用されるKibana URLとElasticsearch URLを指定します。
- 今回は、同一VMインスタンス上に全てのコンポーネントを導入していますが、IPアドレスで指定しています。
- 設定したら、下部の[Save settings]をクリックして閉じます。
- [Agents]タブで[Create user and enable central management]をクリックし、エージェントの一元管理を有効化します。
【参考】
・Quick Start: Get logs and metrics into the Elastic Stack
4. Elastic Agentのインストール
- Elastic Agentのインストールですが、Fleetに以下のような[Add agent]ボタンを押してもインストールされません(笑)
- Elastic AgentをFleetで管理する場合もスタンドアローンで利用する場合もどちらも導入はOS上にダウンロードして行います。
- [Add agent]ボタンをクリックすると表示されるものは、設定手順になります。
- スタンドアローンの場合は、3. Configure the agentというエージェントの設定ファイルの記述方法が記載されています。
- Fleet管理の場合は、ポリシーで配布しますが、スタンドアローンの場合はローカルで設定ファイルを書くことになります。
※ 今回は、Fleet管理の場合の設定手順としています。
- VMインスタンス(CentOS)にElastic Agentをダウンロードし、RPMでインストールします。
$ curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-7.10.0-x86_64.rpm
$ sudo rpm -vi elastic-agent-7.10.0-x86_64.rpm
- 今回のVMインスタンスでは、以下のような形でインストールされます。
$ yum list installed | grep elastic elastic-agent.x86_64 7.10.0-1 installed elasticsearch.x86_64 7.10.0-1 @elastic<br /> kibana.x86_64 7.10.0-1 @elastic
- Fleetの[Add agent]画面に戻り、Elastic Agentで利用するポリシーを選択します。(今回はDefault policyとします)
- 以下セクションのLinux,macOSのコマンドからKibana URLと登録用トークン(enrollment-token)をコピペします。
- RPMでのインストールの場合、以下のコマンドで実行します。
- Kibana URLと登録用トークン(enrollment-token)を貼り付け、VMインスタンスのOS上でroot実行します。
- Kibana URLがHTTPSではない場合は、--insecureオプションをつける必要があります。
$ sudo elastic-agent enroll http://KibanaのIPアドレス:5601 登録用トークン --insecure
- 以下のログ(Successfully enrolled the Elastic Agent.)が表示されていればOKです。
The Elastic Agent is currently in BETA and should not be used in production 2020-11-25T03:45:26.763Z DEBUG kibana/client.go:170 Request method: POST, path: /api/fleet/agents/enroll Successfully enrolled the Elastic Agent. Elastic Agent might not be running; unable to trigger restart
- Elastic Agentのサービス登録を行ない、その後エージェントを起動します。
$ sudo systemctl enable elastic-agent $ sudo systemctl start elastic-agent
- [Agents]タブに導入したホストが追加されていれば、登録は完了になります。
- こちらは、Default Policyに含まれているsystem integrationのみ有効な状態のインデックスです。
- .ds (Data streamsの略)から始まるインデックスがElastic AgentのIntegrationで取得したデータが格納されてるようです。
- Elastic Agentが収集したデータはData streamsと呼ばれるより小分けなデータセットとしてElasticsearchに格納されます。
- Data streamsのデータセットのActionsからView dashboardsをクリックするとダッシュボードを開くことが出来ます。
- [Metrics System]Host overviewをクリックしてみましょう。
- ダッシュボード画面に遷移し、ホストの性能情報の可視化を実現することが出来ます。
【参考】
・Elastic Agentのダウンロード
・Elastic Agentのインストール
・Elastic Agentのコマンドリファレンス
5. Fleet integrationsの追加
- バージョン7.10では、以下の49種類のIntegrationsを利用することが出来ます。
- ネットワークやセキュリティ機器ベンダーの製品が多く、SIEMのためのElastic Agentという印象を持ちます。
No | 名前 | ステータス |
---|---|---|
01 | Apache | EXPERIMENTAL |
02 | AWS | EXPERIMENTAL |
03 | Azure | BETA |
04 | Barracuda | EXPERIMENTAL |
05 | Blue Coat Director | EXPERIMENTAL |
06 | Check Point | EXPERIMENTAL |
07 | Cisco | EXPERIMENTAL |
08 | Citrix | EXPERIMENTAL |
09 | CrowdStrike | EXPERIMENTAL |
10 | CyberArk | EXPERIMENTAL |
11 | CylanceProtect | EXPERIMENTAL |
12 | Endpoint Security | BETA |
13 | F5 | EXPERIMENTAL |
14 | Fortinet | EXPERIMENTAL |
15 | HAProxy | EXPERIMENTAL |
16 | IIS | EXPERIMENTAL |
17 | Imperva SecureSphere | EXPERIMENTAL |
18 | Infoblox NIOS | EXPERIMENTAL |
19 | Juniper | EXPERIMENTAL |
20 | Kafka | EXPERIMENTAL |
21 | Kubernetes | EXPERIMENTAL |
22 | Linux | BETA |
23 | Custom logs | EXPERIMENTAL |
24 | Microsoft | EXPERIMENTAL |
25 | MongoDB | EXPERIMENTAL |
26 | MySQL | EXPERIMENTAL |
27 | NetFlow | EXPERIMENTAL |
28 | Arbor Peakflow SP | EXPERIMENTAL |
29 | Nginx | EXPERIMENTAL |
30 | Office 365 | EXPERIMENTAL |
31 | Okta | EXPERIMENTAL |
32 | Palo Alto Networks | EXPERIMENTAL |
33 | PostgreSQL | EXPERIMENTAL |
34 | Prometheus | EXPERIMENTAL |
35 | Proofpoint Email Security | EXPERIMENTAL |
36 | RabbitMQ | EXPERIMENTAL |
37 | Radware DefensePro | EXPERIMENTAL |
38 | Redis | EXPERIMENTAL |
39 | Sonicwall-FW | EXPERIMENTAL |
40 | Sophos | EXPERIMENTAL |
41 | Squid | EXPERIMENTAL |
42 | Suricata | EXPERIMENTAL |
43 | Symantec AntiVirus/Endpoint Protection | EXPERIMENTAL |
44 | System | BETA |
45 | Apache Tomcat | EXPERIMENTAL |
46 | Windows | EXPERIMENTAL |
47 | Zeek | BETA |
48 | ZooKeeper | EXPERIMENTAL |
49 | Zscaler NSS | EXPERIMENTAL |
- 今回は、Linux Integrationを追加してみます。Linuxをクリックします。
- [Add Linux]をクリックします。
- 赤枠のチェックをONにして、[Save integration]をクリックします。
- [Save and deploy changes]をクリックします。
- Default Policyに[linux-1]が追加されていれば、Integrationsの追加は完了です。
- Linux Integrationのダッシュボードは以下の通りです。
まとめ
さて、Elastic AgentとFleetについて、いかがでしたでしょうか?
当初の目的であったElastic Stackのモニタリング用クラスタへのデータシッパーとして
このElastic Agentが使えるのか、という点において、実現出来ないことが確認出来ました。
(今のところ、Elasticsearch、Kibana、Logstashに関するIntegrationがない。。)
今後、他のBeatsの統合も期待出来ますし、Modulesも追加されていくと思います。
簡単にエージェントの展開が期待できそうだという印象を持ちました。今後に期待ですね^^