Observability:使用 Elastic Agent 来进行 Uptime 监控
2022年9月22日 | by mebius
在 Elastic Stack7.x 中,Elastic 引入 Heartbeat 来对网站或微服务来进行监控。通过 Heartbeat 的应用,我们可以知道网站及微服务的运行情况,我们甚至可以针对服务器的证书的有效期进行监控。随着 Elastic Agent 的推出,Elastic 更建议我们使用 Elastic Agent 的方法来对网站及微服务来进行监控。为了大家能对 Heartbeat 及 Elastic Agent 有更多的认识和了解,请参阅我之前的文章:
在今天的展示中,我将使用如下的架构来进行展示:
我将使用最新的 Elastic Stack 8.4.1 来进行展示。在 macOS 机器上安装 Elasticsearch。我将在 Ubutu OS 上安装微服务来进行展示。
安装
在进行下面的练习之前,我们必须安装好 Elasticsearch 及 Kibana。你可以参考我之前的文章:
-
Elasticsearch:使用 Docker compose 来一tgcode键部署 Elastic Stack 8.x
你需要根据自己的平台选择适合你的文章进行安装。在这里特别指出的是:选择 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 上。如果你的环境有网络流量限制,有一些方法可以解决此tgcode要求。 有关详细信息,请参阅气隙环境。
目前,Fleet 只能被具有 superuser role 的用户所使用。
配置 Fleet
使用 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 网站进行了监控。当然,我们目前没有办法模拟这个网站的宕机情况。
监控 REST 服务运行状态
我们到网址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 界面:
文章来源于互联网:Observability:使用 Elastic Agent 来进行 Uptime 监控
相关推荐: Elasticsearch:我的 Elasticsearch 集群中应该有多少个分片?
作者:Christian Dahlqvist 编者注:“每 GB 堆内存的目标是 20 个或更少分片” 的经验法则在 8.3 版中已弃用。 此博客已更新以反映新建议。 Elasticsearch 是一个非常通用的平台,它支持各种用例,并在数据组织和复制策tgc…