-
Muluk极简,极快,极炫监控WEB服务
云和安全管理服务专家新钛云服 祝祥翻译
监控Web服务器不应该是复杂的
如果您在环境中运行多个 Web 服务器,甚至在 Internet 中运行公共的 Web 站点,则您需要监控这些Web服务。如果您的服务器由于某种原因出现故障,这对您的同事、客户甚至您自己来说可能都会有些影响。出于这个原因,我们必须使用一些监控工具。并且有很多可用的监控工具提供各种功能。
比如,您可以监控应用程序的行为、服务器节点的硬件使用情况,甚至服务器之间的网络流量。当前比较常见的一个解决方案是使用开源工具Nagios,zabbix等,它们允许您监控硬件的每一个部分。
在 Kubernetes 环境中,您可以使用Prometeus/Grafana Operator,它融入了 Kubernetes 的概念,提供了很多不同的export服务,以各种方式监控集群。另外,还有一些解决方式是商业公司提供的监控解决方案。这些商业解决方案宣称不需要复杂的安装。但我个人想知道将应用程序和硬件指标发送到第三方服务是否是一个好的且安全的方式。
监控可以变得很复杂的…
独立于您选择的解决方案,监控可能会变得非常复杂。对于大多数工具,您需要在服务器上安装其他代理工具,并且通常还需要一个或多个数据库来存储监控指标。为了构建有意义的监控解决方案,您还需要深入了解硬件和网络基础设施情况。当然,您需要配置告警,以便在出现问题时获得通知。
监控平台自我的监控
即使您已经有完善的监控解决方案,但您也应该考虑对当前监控工具的监控。例如,如果您在Kubernetes群集中运行Prometheus/Grafana监控解决方案,而您的内部网络出现故障,则不会通知您。
在这种情况下,您的监控方式目前是通常无法提醒您,因为它无法发送电子邮件,甚至无法检测到这种情况。Kubernetes本身无法修复该状态,因为它自身无法感知。
如果您的公网被关闭或者异常,也可能发生类似情况。这些情况往往会很糟糕。因此,您最好做好当前监控工具的监控。即使将监控解决方案作为群集解决方案运行,情况也会变得越来越复杂。
最简约的监控
我们通常关注监控的问题是:检测故障真正需要什么?故障可能意味着您的硬件有缺陷,内存不足,甚至应用程序运行不正常。在后一种情况下,监控硬件没有什么用处。
如果我们讨论Web应用程序和Web服务——这可能是最常见的情况。您可以使用一个简单的HTTP GET请求来测试您的应用程序。最简单的方法是使用“curl”命令行工具。curl GET命令的结果将是网站的内容。而且很容易测试响应特定的字符串:
$ curl https://ralph.blog.imixs.com | grep 'Open Source Blog'
如果输出的事正常的结果,那么你的网站是运行良好的。而且这个方式虽然简单,但是非常使用。您可以在您的网站中对特定的内容进行grep结果。例如,如果你经营一家在线商店,你可以测试识别你产品的特定文本。
这将自动指示不仅您的店铺可用,而且您的数据库已启动并正在运行,其中包含您期望的数据。因此,您可以看到,通过一个HTTP GET请求,您可以检查以下内容:
- 网络是可用的
- 服务器响应
- Web应用程序响应
- 数据库已经启动并运行
- 数据表包含正确的数据
如果请求失败,你当然要做点什么。但老实说,作为管理员,检查服务器磁盘、内存和网络状态只需几秒钟。您不需要任何花哨的图表或仪表板来查看网络是否已异常。
Muluk网络监控项目
快速开始
目前我们推荐的事一个非常健壮的和超级简单的监控解决方案。 开源项目Muluk 提供了一个很简单的服务检查web站点或web服务。此服务可以与Docker一起运行。您可以使用一个命令和一个配置文件来设置监视内容:
$ docker run \ -e TZ="CET" \ -e LANG="en_US.UTF-8" \ -e MULUK_CONFIG_FILE="/opt/jboss/wildfly/config.xml" \ -v $PWD/config.xml:/opt/jboss/wildfly/config.xml \ -p "8080:8080" \ imixs/muluk:latest
配置
基础配置
在配置中。xml文件您可以定义要监控的服务以及通过电子邮件通知发出的警报:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <cluster name="local-dev"> <node> <target>http://localhost:8080</target> </node> </cluster> <mail host="mail.imap.sever" port="465" user="xx" password="yyy" from="info@foo.com"> <recipients>info@foo.com</recipients> </mail> <monitor> <object type="web" > <target>https://www.imixs.org</target> <pattern>Imixs-Workflow supports the BPMN 2.0 standard</pattern> </object> <object type="web"> <target>https://foo.com/</target> <pattern>my-data</pattern> <auth type="basic"> <user>yyy</user> <password>xxx</password> </auth> </object> </monitor> </config>
监控从一个简单的仪表板开始,并在出现问题时发送电子邮件通知。
对象配置
监控对象可以配置不同的身份验证方法和正则表达式,以各种方式测试内容:
<object type="web"> <target>https://foo.com/</target> <pattern>(^Muluk Web Monitor)\w</pattern> <auth type="basic"> <user>yyy</user> <password>xxx</password> </auth> </object>
如果出现问题,该工具将自动向配置的“邮件”部分中定义的邮件收件人发送邮件。该工具还将发送每日通知和总体报告。
邮件配置
Muluk自动通过电子邮件发送通知和提醒。您可以定义的邮件服务器 config. xml 文件部分
<mail host="mail.foo.com" port="465" user="your-user" password="your-password" from="info@foo.com"> <recipients>info@foo.com,admin@foo.com</recipients> </mail>
安全
Web界面受到基本身份验证安全域的保护。您可以使用默认用户“admin”和默认密码“adminadmin”。
改变用户/密码,您只需要创建/编辑 muluk-users.properties 和 muluk-roles.properties 文件。并将这些文件映射到docker容器中。
文件 muluk-users.properties 包含了用户名和密码以进行身份验证。
$ docker run \ -e TZ="CET" \ -e LANG="en_US.UTF-8" \ -v $PWD/config.xml:/opt/jboss/config.xml \ -v $PWD/muluk-users.properties:/opt/jboss/wildfly/standalone/configuration/muluk-users.properties \ -v $PWD/muluk-roles.properties:/opt/jboss/wildfly/standalone/configuration/muluk-roles.properties \ -p "8080:8080" \ imixs/muluk:latest
Rest Api
Muluk Web监控还提供了一个REST API来请求当前配置状态。您可以从以下端点访问Rest API:
http://localhos:8080/api/config
这将返回包含最新监控数据的XML对象。
Kubernetes
要在Kubernetes集群中运行Muluk,可以使用以下目录结构:
muluk/ ├── 010-deployment.yaml └── config ├── config.xml └── muluk-users.properties
在子目录的配置中,你可以在 config.xm和文件 muluk-users.properties中加入您的访问密码。
首先从config目录创建一个configmap:
$ kubectl create namespace muluk $ kubectl create configmap muluk-config --from-file=./muluk/config/ -n muluk
这些文件在deployment的ymal文件中:
apiVersion: apps/v1 kind: Deployment metadata: name: imixs-muluk namespace: muluk labels: app: imixs-muluk spec: replicas: 1 selector: matchLabels: app: imixs-muluk strategy: type: Recreate template: metadata: labels: app: imixs-muluk spec: containers: - image: imixs/muluk:latest name: imixs-muluk imagePullPolicy: Always env: - name: TZ value: Europe/Berlin - name: LANG value: "en_US.UTF-8" ports: - name: web containerPort: 8080 volumeMounts: - name: muluk-configmap-volume mountPath: /opt/jboss/config.xml subPath: config.xml - name: muluk-configmap-volume mountPath: /opt/jboss/wildfly/standalone/configuration/muluk-users.properties subPath: muluk-users.properties restartPolicy: Always volumes: - name: muluk-configmap-volume configMap: name: muluk-config
您应该根据Kubernetes环境添加service和ingress以访问Web前端。
监测监控
由于安装非常简单,您可以在任何环境(包括Kubernetes群集)中启动该服务。要监视监视器是否已启动并正在运行,只需将监视器端点添加到每个监视器的“群集”部分:
<cluster name="local-dev"> <node> <target>http://my.first.cluster.com:8080</target> </node> <node> <target>http://my.second.cluster.com:8080</target> </node> <node> <target>http://my.thrid.cluster.com:8080</target> </node> </cluster>
通过这种方式,Muluk监控工具只需检查列出的每个监控器的运行状况即可进行自我监控。您甚至可以从个人笔记本上运行显示结果。
原文及参考:
- github:https://github.com/imixs/muluk
- https://ralph.blog.imixs.com/2021/09/04/monitoring-web-servers-should-never-be-complex/