fbpx

新エージェントツール「Elastic Agent」って一体何者? #Elastic #Elasticsearch

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

New call-to-action

皆様、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を個別にインストールする手間を減らすことを目的に開発されました。

中身は、FilebeatMetricbeatEndpoint Securityが統合されたものになっています。

image.png

最新バージョンの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を利用可)

image.png

また、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上に導入しています。

実施手順


  • 以下の手順で設定を実施しました。
  1. Elasticsearchの設定
  2. Kibanaの設定
  3. Fleetの初期設定
  4. Elastic Agentのインストール
  5. 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]をクリックします。

image.png

  • Elastic Agentに配布される全てのポリシーに適用されるKibana URLElasticsearch URLを指定します。
  • 今回は、同一VMインスタンス上に全てのコンポーネントを導入していますが、IPアドレスで指定しています。
  • 設定したら、下部の[Save settings]をクリックして閉じます。

image.png

  • [Agents]タブで[Create user and enable central management]をクリックし、エージェントの一元管理を有効化します。

image.png

【参考】
Quick Start: Get logs and metrics into the Elastic Stack

4. Elastic Agentのインストール

  • Elastic Agentのインストールですが、Fleetに以下のような[Add agent]ボタンを押してもインストールされません(笑)
  • Elastic AgentをFleetで管理する場合もスタンドアローンで利用する場合もどちらも導入はOS上にダウンロードして行います。

image.png

  • [Add agent]ボタンをクリックすると表示されるものは、設定手順になります。
  • スタンドアローンの場合は、3. Configure the agentというエージェントの設定ファイルの記述方法が記載されています。
  • Fleet管理の場合は、ポリシーで配布しますが、スタンドアローンの場合はローカルで設定ファイルを書くことになります。

image.png

※ 今回は、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とします)

image.png

  • 以下セクションのLinux,macOSのコマンドからKibana URLと登録用トークン(enrollment-token)をコピペします。

image.png

  • 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]タブに導入したホストが追加されていれば、登録は完了になります。

image.png

  • こちらは、Default Policyに含まれているsystem integrationのみ有効な状態のインデックスです。
  • .ds (Data streamsの略)から始まるインデックスがElastic AgentのIntegrationで取得したデータが格納されてるようです。

image.png

  • Elastic Agentが収集したデータはData streamsと呼ばれるより小分けなデータセットとしてElasticsearchに格納されます。

image.png

  • Data streamsのデータセットのActionsからView dashboardsをクリックするとダッシュボードを開くことが出来ます。

image.png

  • [Metrics System]Host overviewをクリックしてみましょう。

image.png

  • ダッシュボード画面に遷移し、ホストの性能情報の可視化を実現することが出来ます。

image.png

【参考】
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をクリックします。

image.png

  • [Add Linux]をクリックします。

image.png

  • 赤枠のチェックをONにして、[Save integration]をクリックします。

image.png

  • [Save and deploy changes]をクリックします。

image.png

  • Default Policyに[linux-1]が追加されていれば、Integrationsの追加は完了です。

image.png

  • Linux Integrationのダッシュボードは以下の通りです。

image.png

まとめ


さて、Elastic AgentとFleetについて、いかがでしたでしょうか?

当初の目的であったElastic Stackのモニタリング用クラスタへのデータシッパーとして
このElastic Agentが使えるのか、という点において、実現出来ないことが確認出来ました。
(今のところ、Elasticsearch、Kibana、Logstashに関するIntegrationがない。。)

今後、他のBeatsの統合も期待出来ますし、Modulesも追加されていくと思います。
簡単にエージェントの展開が期待できそうだという印象を持ちました。今後に期待ですね^^

Author

ログ分析基盤のアーキテクチャデザインやクラウドにおけるセキュリティ実装方式を研究するElasticエバンジェリスト。
国内エンジニアの貴重なリソースを効率良く活用できるよう、技術ナレッジを惜しみなく発信するよう心がけている。

日比野恒の記事一覧

新規CTA