在我之前的文章:
- Beats:Beats 入門教程 (一)
- Beats:Beats 入門教程 (二)
我詳細描述了如何在 Elastic Stack 7.x 安裝及配置 Beats。在那里的安裝,它通常不帶有安全及 Elasticsearch 在默認的情況下,不含有 HTTPS 訪問。在最新的 Elastic Stack 8.x 中,Elasticsearch 集群在默認的情況下是帶有安全訪問的。這樣針對 Metricbeat 訪問 Elasticsearch 它和之前的情形是不同的。我在之前文章 “Elastic Stack 8.0 安裝 - 保護你的 Elastic Stack 現在比以往任何時候都簡單” 有描述 Beats 如何連接到 Elasticsearch。在今天的文章里,我們來詳細地 Beats 描述如何安全地連接到 Elasticsearch。
在今天的展示中,我將使用最新的 Elastic Stack 8.9.0 來進行展示。我將使用如下的架構:
安裝
Elasticsearch 及 Kibana
如果你還沒有安裝好自己的 Elasticsearch 及 Kibana,請參考我之前的文章:
- 如何在 Linux,MacOS 及 Windows 上進行安裝 Elasticsearch
-
Kibana:如何在 Linux,MacOS 及 Windows 上安裝 Elastic 棧中的 Kibana
在安裝的時候,請選擇使用 Elastic Stack 8.x 的安裝指南來進行安裝。在安裝的時候,我們需要記錄下它的 elastic 超級用戶的密碼,fingerprint 信息,以備后面的配置所使用:
? Elasticsearch security features have been automatically configured!
? Authentication is enabled and cluster connections are encrypted.?? Password for the elastic user (reset with `bin/elasticsearch-reset-password -u elastic`):p1k6cT4a4bF+pFYf37Xx?? HTTP CA certificate SHA-256 fingerprint:633bf7f6e4bf264e6a05d488af3c686b858fa63592dc83999a0d77f7e9fe5940?? Configure Kibana to use this cluster:
? Run Kibana and click the configuration link in the terminal when Kibana starts.
? Copy the following enrollment token and paste it into Kibana in your browser (valid for the next 30 minutes):eyJ2ZXIiOiI4LjkuMCIsImFkciI6WyIxOTIuMTY4LjAuMzo5MjAwIl0sImZnciI6IjYzM2JmN2Y2ZTRiZjI2NGU2YTA1ZDQ4OGFmM2M2ODZiODU4ZmE2MzU5MmRjODM5OTlhMGQ3N2Y3ZTlmZTU5NDAiLCJrZXkiOiJ3WEE3MDRrQkxxWTFWWGY0QWRHbDpCa0VZVXZmaFFidWNPOFUxdXJwXzZnIn0=?? Configure other nodes to join this cluster:
? On this node:? Create an enrollment token with `bin/elasticsearch-create-enrollment-token -s node`.? Uncomment the transport.host setting at the end of config/elasticsearch.yml.? Restart Elasticsearch.
? On other nodes:? Start Elasticsearch with `bin/elasticsearch --enrollment-token <token>`, using the enrollment token that you generated.
為了能夠使得我們的 Kibana 能被其他的電腦所訪問,我們必須針對 kibana.yml 文件進行一項配置:
server.host: "0.0.0.0"
修改完畢后,我們必須重新啟動 Kibana。
Metricbeat
有關 Metricbeat 的安裝,我們可以參考官方文檔?Metricbeat quick start: installation and configuration | Metricbeat Reference [8.9] | Elastic?來進行安裝。針對大多數的應用場景,我們可以使用倉庫進行安裝。我們可以參考鏈接?Repositories for APT and YUM | Metricbeat Reference [8.9] | Elastic?來進行安裝。首先,我們創建如下的一個文檔:
install.sh
#!/bin/bash
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -;
sudo apt-get -y install apt-transport-https;
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list;
apt-get update;
apt-get install -y metricbeat;
chmod +x install.sh
我們打入上面的命令來把上面的腳步變為可執行文件,并打入如下的命令:
sudo ./install.sh
這樣我們就完成了我們的 Metricbeat 的安裝。
配置 Metricbeat
在完成 Metricbeat 的配置后,我們進入到 Metricbeat 的配置目錄中,并對它的配置文件 metricbeat.yml 進行配置:
/etc/metricbeat/metricbeat.yml
parallels@ubuntu2004:/etc/metricbeat$ pwd
/etc/metricbeat
parallels@ubuntu2004:/etc/metricbeat$ ls
fields.yml http_ca.crt metricbeat.reference.yml metricbeat.yml modules.d
我們需要針對 metricbeat.yml 文件做如下的修改:
/etc/metricbeat/metricbeat.yml
把上面的標志設置為 true,那么每次修改 metricbeat.yml 后,會自動裝載 metricbeat.yml 而不用重新啟動 metricbeat。
我們需要把 Elasticsearch 的證書拷貝到當前的 Metricbeat 配置目錄下。我們可以在 macOS 機器的?Elasticsearch 的安裝目錄中找到這個證書文件 http_ca.crt 文件:
$ pwd
/Users/liuxg/elastic/elasticsearch-8.9.0/config/certs
$ ls
http.p12 http_ca.crt transport.p12
我們把上面的證書拷貝到 Metricbeat 的安裝目錄中:
root@ubuntu2004:/etc/metricbeat# pwd
/etc/metricbeat
root@ubuntu2004:/etc/metricbeat# ls
fields.yml http_ca.crt metricbeat.reference.yml metricbeat.yml modules.d
我們接下來繼續配置 metricbeat.ym 文件:
我們需要手動修改上面的部分。把 elastic 超級用戶的密碼填入,并配置證書。
為了驗證我們的配置是否有語法錯誤,我們可以使用如下的命令來進行檢測:
metricbeat test config
root@ubuntu2004:~# metricbeat test config
Config OK
我們接下來測試 output。這個部分是為了測試能夠正確地連接到 Elasticsearch。我們使用如下的命令:
metricbeat test output
root@ubuntu2004:~# metricbeat test output
elasticsearch: https://192.168.0.3:9200...parse url... OKconnection...parse host... OKdns lookup... OKaddresses: 192.168.0.3dial up... OKTLS...security: server's certificate chain verification is enabledhandshake... OKTLS version: TLSv1.3dial up... OKtalk to server... OKversion: 8.9.0
很顯然,我們的測試是成功的。它能夠正確地連接到 Elasticsearch。這樣我們的配置是完全成功的。
在上面,我們發現在 metricbeat 里使用硬編碼把用戶名及密碼寫入到文件中,這個是一個不好的習慣,因為有人可以查看這個文件就會發現你使用的密碼等信息。我們可以使用 keystore 來保護這些信息。
root@ubuntu2004:/etc/metricbeat# metricbeat keystore create
Created metricbeat keystore
root@ubuntu2004:/etc/metricbeat# metricbeat keystore add ES_USER
Enter value for ES_USER:
Successfully updated the keystore
root@ubuntu2004:/etc/metricbeat# metricbeat keystore add ES_PASSWORD
Enter value for ES_PASSWORD:
Successfully updated the keystore
root@ubuntu2004:/etc/metricbeat# metricbeat keystore list
ES_PASSWORD
ES_USER
有了這些配置過后,我們可以重新來修改 metricbeat.yml 文件:
修改完畢后,我們使用如下的命令重新來驗證輸出:
root@ubuntu2004:/etc/metricbeat# metricbeat test output
elasticsearch: https://192.168.0.3:9200...parse url... OKconnection...parse host... OKdns lookup... OKaddresses: 192.168.0.3dial up... OKTLS...security: server's certificate chain verification is enabledhandshake... OKTLS version: TLSv1.3dial up... OKtalk to server... OKversion: 8.9.0
很顯然我們的輸出是成功的。這樣我們的用戶名及密碼就可以不暴露了,即便配置文件被別人所看到。
啟動模塊
在默認的情況下,system 模塊是自動啟動的。我們可以通過如下的命令來進行查看:
metricbeat modules list
root@ubuntu2004:~# metricbeat modules list
Enabled:
systemDisabled:
activemq
aerospike
airflow
apache
aws
awsfargate
azure
beat
beat-xpack
ceph
ceph-mgr
cloudfoundry
cockroachdb
...
?從上面的顯示結果中,我們可以看出來 system 模塊是被啟動的。我們也可以通過查看當前 metricbeat 下的 modules.d 目錄來看出來:
從上面的輸出中,我們可以看出來,只有 system.yml 文件的后綴不含有 disabled。它表明這個模塊是被啟動的。事實上,我們可以在這個目錄下直接把某個模塊的擴展名 disabled 去掉,就可以啟動該模塊。我們也可以通過如下的命令來禁止模塊,比如:
metricbeat modules disable system
上面的命令禁止 system 模塊。我們可以通過如下的命令來進行查看:
metricbeat modules list
我們可以使用如下的命令來重新啟動 system 模塊:
metricbeat modules enable system
root@ubuntu2004:/etc/metricbeat# metricbeat modules enable system
Enabled system
?
啟動 Metricbeat
在上面,我們已經成功地配置了 Metricbeat。我們接下來運行如下的 setup 命令來加載 Dashboards 及創建相應的 pipeline,index template 等:
metricbeat setup
上述命令將運行一會兒時間。我們可以看到:
root@ubuntu2004:~# metricbeat setup
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling.Index setup finished.
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
針對所有的 Metricbeat 模塊來說,我們只需要運行上面的命令一次就夠了,即便當前的模塊沒有被啟動。等上面的命令完成后,我們可以到 Kibana 中進行查看:
?
我們接下來運行如下的命令來采集數據:
service metricbeat start
?
?
從上面,我們可以看出來運行狀態正常。我們到 Kibana 中去查看數據:
?
?
?我們可以在 index management 里查看到:
?
顯然這個數據是以 data stream 的形式采集進來的。?
好了,今天的文章就先介紹到這里。在后面的文章里,我將繼續介紹如何創建一個具有較少權限的用戶來配置 Metricbeat。目前的 elastic 用戶被用來配置,在很少的情況會這么做。另外,我還將探討使用其他形式的證書來配置 output。