在某些情况下,Metrics 监控的 2 大顶流:
是共存的。但是在这种情况下,统一监控展示就不太方便,本文介绍利用 Grafana 对接 Zabbix, 来作为统一监控展示端。Let's go!
在这里,主要是用到了 alexanderzobnin/grafana-zabbix 开源项目。
Grafana-Zabbix 是 Grafana 的一个插件,允许可视化来自 Zabbix 的监控数据,并创建用于分析指标和实时监控的仪表板。 该项目的主要目标是扩展 Zabbix 的监控数据可视化功能,并提供快速、强大的方法来创建仪表板。
Grafana 与 Grafana-Zabbix 插件相结合,可以创建很棒的仪表板。 Grafana-Zabbix 有如下的功能亮点:
接下来我们进行一个快速演示,所有资源都安装在 K8s 中。
curl -sfL https://rancher-mirror.oss-cn-beijing.aliyuncs.com/k3s/k3s-install.sh | INSTALL_K3S_MIRROR=cn sh -
安装完成后执行以下命令查看运行状态:
sudo systemctl status k3s.service
kubectl get node
kubectl get addons -A
使用 Helm 安装:
# 添加 Grafana repo
helm repo add grafana https://grafana.github.io/helm-charts
# 安装
helm upgrade --install my-release grafana/grafana -n grafana --create-namespace --set persistence.enabled=true --set service.type=NodePort
这里为了后续使用方便加了 2 个参数:
persistence.enabled=true 数据持久化,重启不丢失service.type=NodePort 方便通过 NodePort 直接访问 Grafana UI为了图省事,也直接将 Zabbix 安装在 K3s 中。
但是?注意,往往在生产使用场景中,Zabbix 是安装在虚拟机环境上的,并用 Zabbix Proxy 和 Zabbix Agent 监控 Prometheus 覆盖不到的区域(典型如:非容器化的物理机、虚机;网络设备;数据库等)
直接在 Helm Chart 官方市场 - Artifact Hub 里找一个安装:
helm repo add aekondratiev https://aekondratiev.github.io/helm-charts
helm install zabbix aekondratiev/zabbix-server -n zabbix --create-namespace
这个 aekondratiev/zabbix-server helm chart 会安装以下组件:
这里提一下,Grafana-Zabbix 插件可以使用 MySQL、Postgres 或 InfluxDB 数据源直接从 Zabbix 数据库查询历史和趋势数据。 为了执行查询,插件仅需要对history、history_uint、trends 和 trends_uint 表的读访问权限。 为了使连接更安全并防止不必要数据泄漏,强烈建议只授予对表的读访问权限。 但是如果您想使用这个数据源来查询其他数据,您可以向整个 zabbix 数据库授予 SELECT 权限。 此外,所有查询都由 Grafana 服务器调用,因此您可以将连接限制为仅与 Grafana 主机连接。 下面是 MySQL 示例:
GRANT SELECT ON zabbix.* TO 'grafana'@'grafana-host' identified by 'password';
在 Grafana 的创建 Data Source 选项中,选择 PostgreSQL 数据源类型并提供数据库主机地址和端口(默认值为 5432)。 填写数据库名称(通常为 zabbix)并指定凭据。如下图所示:

之所以启用数据库直连, 是因为如果海量的 zabbix 历史和趋势数据都通过 zabbix 的 API 查询,性能会有一定问题。
进入 Grafana 容器中,并使用 grafana-cli 安装:
kubectl exec -n grafana -it <grafana-pod-name> -- /bin/sh
# 进入容器后,执行
grafana-cli plugins install alexanderzobnin-zabbix-app
# 安装完成后
exit
# 退出容器后
kubectl rollout -n grafana restart deployment <grafana-deploy-name>
?Warning:
通过
grafana-cli安装插件后需要重启生效,所以一定需要配置persistence.enabled=true, 否则重启后数据丢失,插件还是没装上。
安装后,就可以启用插件了。
通过 Grafana 的 Nodeport (如:http://192.168.1.5:30000) 访问并登录 Grafana(?密码在 K8s Secret 中), 进入 Grafana 侧面板的 plugins 界面,选择 Apps 选项卡,然后选择 Zabbix ,打开 Config 选项卡并启用插件。如下图:

启用插件后,就可以添加 Zabbix data source 了。
要添加新的 Zabbix 数据源,单击 Add data source 并从下拉列表中选择 Zabbix。如下图:


关键的配置项有以下几个:(其他一般不需要动)
/api_jsonrpc.php, 如上图 1 中的:http://zabbix-web.zabbix/api_jsonrpc.php之后,导入自带的几个 Zabbix 的仪表板:

接下来就能看到效果啦:

如上图,Grafana 支持灵活的表达式配置 zabbix 仪表板:
完全不用担心 Zabbix 上某些复杂的仪表板无法在 Grafana 上复现。
下面是官方的一些 demo:




点击侧边栏 Alerting, 就可以创建基于 Zabbix 的告警,也可以直接在仪表板上编辑 panel 的 alert 进行配置,配置后效果如下:

以上就是本次全部的演示全过程,感兴趣的可以自己尝试复现一下。
???
在本文中,我们介绍了利用 Grafana + 插件:Grafana-Zabbix 实现了以下效果:
更近一步,我们的环境上,可能不止有 Zabbix 和 Prometheus 2 个数据源,甚至还会有:
在这种情况下,将所有的这些监控都视作 Grafana 的数据源,实现监控数据的统一展示和联动:

联动:

只能说,Grafana 为我们描绘了一个相当美妙的场景,未来可期。?️?️?️
本文由博客一文多发平台 OpenWrite 发布!
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po