我有一个运行 Java 进程的基于云的服务器(一个名为 davmail 的 POP/SMTP 服务器,细节并不重要)。
远程监控 Java 进程状态的最简单方法是什么?我需要知道它是否以及何时下降。我可以只打开 ssh 会话并跟踪日志,但是有更优雅的方法吗?
也许我需要安装一个网络服务器并在同一服务器上运行一些监控软件。或者也许有一个我可以在本地计算机(Mac)上运行的客户端程序,每当 Java 进程停止时,服务器上的某个 cron 作业就会向该程序发出警报?
答案1
好吧,你总是可以让 cronjob 做
echo "100 logout" | nc yourserver.fqdn 143 || \
{
echo "The server is down" |\
mailx -s "Red alert! Red alert! This is not a drill!" [email protected];
}
取决于您所说的简单以及您可能想要的其他功能。
100 logout
只是一个非常简单的 IMAP 命令,如果您之前没有登录,它将使服务器终止连接。nc
是一个打开 TCP 连接并将 STDIN 和 STDOUT 连接到套接字的工具。
组合结果会建立与 IMAP 服务器的连接,并告诉它“我们完成了”。如果您的 IMAP 服务器已启动并正在运行,它会识别该命令并关闭 TCP 连接,从而nc
正常退出。
如果出现问题,例如 TCP 连接从未建立,或者由于服务器不处理 IMAP 命令而超时,则您的 IMAP 服务器显然不可用。在这种情况下,您需要一个通知,并且在这种情况下nc
总是会异常终止。
||
意味着如果nc
异常终止,则{ ... }
执行其中的所有内容。我在此处提供的示例命令使用mailx
以下命令发送电子邮件[电子邮件受保护]主题为“红色警报!红色警报!这不是演习”,内容为“服务器已关闭”。
但请注意,mailx 并不是每个 Linux 安装的一部分,并且它有不同的版本,其行为也不同。
当然,您可以部署一些监控软件,例如新肯,它有一个精美的网络前端,可以跟踪他们监控的内容并可以发送电子邮件。
答案2
这一切都取决于你所说的“下降”是什么意思,你正在运行和做什么的细节做监控时也很重要......
对“服务”进行监控的最彻底的形式是拥有一个外部自动化系统做你的客户做的事并向您报告任何意想不到的事情发生。
根据您的电子邮件服务的简要描述,我的第一个端到端测试将是:
- 通过 SMTP发送电子邮件
#id
至本地monitor
帐户 - 等待您希望的最大秒数。
- 检查POP 服务器上的电子邮件
#id
@ 。monitor
来自外部监控主机的一次检查将发现简单电子邮件系统中可能出现的大约 99% 的问题。
这些服务或事务监视器往往是用类似的方式编写的自定义脚本红宝石,Python或者珀尔其中有模块可以轻松实现诸如邮件传输协议或者流行音乐以编程方式。然后,这些脚本通常会插入监控解决方案,但如果您想要一些简单的东西,甚至通过 cron 作业的网关触发简单的电子邮件或短信就足够了。如果您购买监控解决方案,您通常会在 GUI 设计人员处尝试使用相同类型的监控器。
当然,在现实世界中,这很快就会变得更加复杂。您可能为需要再次检查的 POP 和 SMTP 提供安全端口。也许 IMAP 中添加了一些 Carddav 和 Caldav,您可能在多个主机上拥有服务。
像上面这样的整体服务检查不会轻易告诉您的是在哪里问题就在于,只是有问题某处。
较低级别的监控
通过监控服务的各个组件,您基本上可以在进行任何跑腿工作之前更轻松地通过监控来识别(或预测)问题所在。这种类型的组件监控正是系统所喜欢的纳吉奥斯,扎比克斯或者像这样的大的蒂沃利监控擅长。
这可能是一个不断扩展的事物树,具体取决于您制作的详细程度以及支持您的“服务”的系统的复杂程度
“您的邮件服务”取决于
Services: POP:110 SMTP:25
Application: devmail
OS: linux Z
Host: server Y
Components: diskA diskB cpu1 cpu2 memory
Ntwork: ethernetA, Switch B, Router C, Firewall X
每个组件都有您可以报告的指标或状态。
外部
Service:
POP service - Are we accepting connections on 110,995
SMTP service - Are we accepting connections on 25,587
本地
Application:
devmail process(es) (is it running, memory, cpu, handles, io)
JMX parameters of the java process (memory, threads, performance, garbage collection)
OS:
Disk, Memory, Cpu, IO
etc...
如果监控主机宕机了怎么办?或者它只是服务和监视器之间的网络。
通常最好从两个(或更多)外部主机运行服务检查,这些主机尽可能接近客户端的来源(不影响您的监控)。然后还在主机本地或至少从本地网络运行检查。通过这种方式,您可以更好地了解大多数基于网络的问题。
- 如果一个外部客户端发生故障,则可能是外部网络发生故障。
- 如果本地客户端正常工作,但所有外部客户端都出现故障,可能是本地网络。
- 如果所有客户端都失败,则可能是本地问题。
我发现很多人倾向于以错误的方式构建监控解决方案。他们提出了许多较低级别的系统指标以及 1000 个他们认为适合发出警报的监视器和级别,但如果真的很重要,则没有任何警报。我的意思是它们非常适合分析和容量管理,您可以从所有这些值中制作一些漂亮的图表,它们非常有用,但当您错过了 y 级别的指标 x 时,这意味着没有人可以接收,它们实际上并没有多大意义电子邮件。
答案3
有许多监控应用程序可以配置为以各种方式发送警报 - 通过 SNMP 陷阱、电子邮件、短信(如果您有硬件或软件/订阅)。他们中的许多人还可以根据需要自行重新启动该过程。
Google 搜索 monit、nagios,或者只是“监控软件”。还https://softwarerecs.stackexchange.com/可能是寻求建议的好地方。
答案4
我建议尝试一下海狮。它是一个基于云的Linux服务器监控工具。安装只需几秒钟,用户界面干净简单。另外,警报功能很棒。有一个“每日摘要”功能,每天都会向您发送一封定时电子邮件,其中包含服务器性能的摘要。