在 Elastic Stack 7.x 中,Elastic 引入 Heartbeat 来对网站或微服务来进行监控。通过 Heartbeat 的应用,我们可以知道网站及微服务的运行情况,我们甚至可以针对服务器的证书的有效期进行监控。随着 Elastic Agent 的推出,Elastic 更建议我们使用 Elastic Agent 的方法来对网站及微服务来进行监控。为了大家能对 Heartbeat 及 Elastic Agent 有更多的认识和了解,请参阅我之前的文章:
在今天的展示中,我将使用如下的架构来进行展示:
我将使用最新的 Elastic Stack 8.4.1 来进行展示。在 macOS 机器上安装 Elasticsearch。我将在 Ubutu OS 上安装微服务来进行展示。
在进行下面的练习之前,我们必须安装好 Elasticsearch 及 Kibana。你可以参考我之前的文章:
你需要根据自己的平台选择适合你的文章进行安装。在这里特别指出的是:选择 Elastic Stack 8.x 的文章来进行安装。
我们按照上面的要求进行安装 Elasticsearch 及 Kibana。为了能够让 fleet 正常工作,内置的 API service 必须启动。我们必须为 Elasticsearch 的配置文件 config/elasticsearch.yml 文件配置:
config/elasticsearch.yml
xpack.security.authc.api_key.enabled: true
配置完后,我们再重新启动 Elasticsearch。针对 Kibana,我们也需要做一个额外的配置。我们需要修改 config/kibana.yml 文件。在这个文件的最后面,添加如下的一行:
config/kibana.yml
-
- xpack.encryptedSavedObjects.encryptionKey: 'fhjskloppd678ehkdfdlliverpoolfcr'
如果你不想使用上面的这个设置,你可以使用如下的方式来获得:
./bin/kibana-encryption-keys generate
从上面的输出中,我们可以看出来,有三个输出的 key。我们可以把这三个同时拷贝,并添加到 config/kibana.yml 文件的后面。当然,我们也可以只拷贝其中的一个也可。我们再重新启动 Kibana。
这样我们对 Elasticsearch 及 Kibana 的配置就完成。 针对 Elastic Stack 8.0 以前的版本安装,请阅读我之前的文章 “Observability:如何在最新的 Elastic Stack 中使用 Fleet 摄入 system 日志及指标”。
除此之外,Kibana 需要 Internet 连接才能从 Elastic Package Registry 下载集成包。 确保 Kibana 服务器可以连接到https://epr.elastic.co 的端口 443 上 。如果你的环境有网络流量限制,有一些方法可以解决此要求。 有关详细信息,请参阅气隙环境。
目前,Fleet 只能被具有 superuser role 的用户所使用。
使用 Kibana 中的 Fleet 将日志、指标和安全数据导入 Elastic Stack。第一次使用 Fleet 时,你可能需要对其进行设置并添加 Fleet Server。在做配置之前,我们首先来查看一下有没有任何的 integration 被安装:
我们打开 Fleet 页面:
我们接下来添加 Agent:
上面显示我们的 Fleet Sever policy 被成功地创建了。我们需要把我们的 Fleet Server 安装到 Ubuntu OS 机器上。
我们的目标机器是 Linux OS。我们点击上面的拷贝按钮,并在 Linux OS 上进行安装:
- curl -L -O https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-8.4.1-linux-x86_64.tar.gz
- tar xzvf elastic-agent-8.4.1-linux-x86_64.tar.gz
- cd elastic-agent-8.4.1-linux-x86_64
- sudo ./elastic-agent install \
- --fleet-server-es=https://192.168.0.3:9200 \
- --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE2NjM1NjQxNTY5MzI6TGxhdWtjbmdTSnlYNlBEVkxOQUVJQQ \
- --fleet-server-policy=fleet-server-policy \
- --fleet-server-es-ca-trusted-fingerprint=f77c4413ccc6a034ac9767f12b9f8240bf301ce956ce0d96109a7863c4a33463
我们安装上面的命令在 Ubuntu 机器上运行,并安装好 Elastic Agent:
我们可以使用如下的命令来检查 Elastic Agent 的运行状态:
service elastic-agent status
上面显示我们的 Elastic Agent 的状态显示是 active 的。
我们回到 Kibana 的界面:
上面显示我们的连接状态是 connected 状态。
上面显示我们的 Ubuntu OS 机器是处于 Healthy 的状态。
由于我们的 Elastic Agent 和 Fleet Server 是在一个服务器上运行的,所以,我们直接在 Fleet Server Policy 里添加我们想要的 integration。如果你的 Elastic Agent 可以运行于另外的一个机器上,而不和 Fleet Server 在同一个机器上,你可以创建一个新的 policy,比如 logs。然后让 agent 赋予给这个 新创建的 policy。我们需要明白的一点是在我们上面安装 Elastic Agent 的时候,它同时也安装了 Fleet Server。在一个机器上,我们只能运行一个 Elastic Agent 的实例。我们在 Ubuntu OS 机器上使用如下的命令来进行查看:
ps aux | grep fleet
我们可以看到 Fleet Server 是正在运行中的。
对于一些开发者来说,他们可能想到会卸载 Elastic Agent。那么我们该如何进行操作呢?我们使用如下的命令:
- liuxg@liuxgu:~$ su
- Password:
- root@liuxgu:/home/liuxg# cd
- root@liuxgu:~# cd /opt/Elastic/Agent/
- root@liuxgu:/opt/Elastic/Agent# ls
- data elastic-agent.yml NOTICE.txt
- elastic-agent elastic-agent.yml.2022-09-19T13-24-57.7474.bak README.md
- elastic-agent-20220919-1.ndjson fleet.enc vault
- elastic-agent-20220919.ndjson fleet.enc.lock
- elastic-agent.reference.yml LICENSE.txt
- root@liuxgu:/opt/Elastic/Agent# ./elastic-agent remove
我们可以在 /opt/Elastic/Agent 这个目录中找到 elastic-agent 这个运行程序。使用上面的命令即可删除 Elastic Agent 的安装。针对我们的情况,我们不需要这么做。我们将继续下面的操作。
由于在 Ubuntu 机器上,我们只能运行一个 Elastic Agent 的实例,而这个 Agent (liuxgu)已经处于 Fleet Server Policy 中,我们直接在这个 policy 中添加一个叫做 Elastic Synthetics 的 integration:
在这里我们必须注意的是目前 Elastic Sythetics 是一个 Beta 的发布。它可能和最终的 GA 发布版有所不同。
在上面,我们选用 HTTP 来侦测 Free and Open Search: The Creators of Elasticsearch, ELK & Kibana | Elastic 的网站运行情况。
我们接下来查看 datastream 里的数据:
我们在上面的最后一行可以看到 synthetics 的一个列表。它表明我们已经在采集数据了。针对这个条目,它没有对应的 Dashboard。我们需要打开 Uptime 应用来进行查看:
在上面,我们已经成功地对 elastic.co 网站进行了监控。当然,我们目前没有办法模拟这个网站的宕机情况。
我们到网址 https://github.com/liu-xiao-guo/uptime_example 下载代码:
git clone https://github.com/liu-xiao-guo/uptime_example
我们把这个 REST 服务部署到 Ubuntu OS 下。下载后的文件如下:
- liuxg@liuxgu:~$ cd uptime_example/
- liuxg@liuxgu:~/uptime_example$ ls
- README.md heartbeat.yml monitors.d services
- liuxg@liuxgu:~/uptime_example$ tree -L 3
- .
- ├── README.md
- ├── heartbeat.yml
- ├── monitors.d
- │ ├── icmp.yml
- │ ├── restful.http.yml
- │ ├── soap.http.yml
- │ └── tcp.yml
- └── services
- ├── README.md
- ├── restful
- │ ├── build.gradle
- │ └── src
- └── soap
- ├── build.gradle
- └── src
如上所示,在上面的 services 目录中,有一个叫做 restful 的目录。我们进入到该目录中:
- gradle clean
- gradle build
- liuxg@liuxgu:~/uptime_example/services/restful$ gradle build
-
- BUILD SUCCESSFUL in 1s
- 3 actionable tasks: 3 executed
- liuxg@liuxgu:~/uptime_example/services/restful$ ls build/libs/
- restful-1.0.0.jar
如上所示,我们看到一个叫做 restful-1.0.0.jar 的文件。我们可以通过如下的方式来运行:
java -jar restful-1.0.0.jar
我们可以在浏览器中,通过如下的方式来进行访问:
或者通过如下的 curl 命令来进行检查这个 RESTful 服务的运行:
- $ curl http://ubuntu:9001/product/logstash | jq
- % Total % Received % Xferd Average Speed Time Time Time Current
- Dload Upload Total Spent Left Speed
- 100 29 0 29 0 0 2177 0 --:--:-- --:--:-- --:--:-- 3222
- {
- "name": "Logstash",
- "qty": 900
- }
从上面的显示中,我们可以看到我们的链接地址 http://ubuntu:9001/product/logstash 返回一个 JSON 的结果。针对我们的检测来说,我们如果通过这个接口能够返回到这样的一个 JSON 的结果,我们认为我们的微服务是正常工作的,否则,我们认为是处于不正常工作状态。为此,我们再添加一个 Elastic Synthetics 集成:
保存当前的设置:
按照同样的方法,我们进入到 Uptime 应用中:
从上面的输出中,我们可以看到服务是运行正常的。我们接下来去 Ubuntu 机器运行的 terminal 中中断这个服务的运行。我们使用 CTRL + C 组合键:
过一段时间,我们再回到 Uptime 的界面:
从上面的输出中,我们可以看到该服务已经是 DOWN 的状态了。
我们再次启动 REST 服务:
过一小会儿,我们再次回到 Kibana 的 Uptime 界面: