jjzjj

利用saltstack的api接口和modules实现实时监控

rfyiamcool 2023-03-28 原文
前言:


     其实一说起实时监控,我就有很多的感想 ~  以前也做过几个类似的全网流量监控的项目,用过websocket的模式的,还有就是redis pubsub模式,还有就是从同事的nagios获取流量数据(这个结果很郁闷,nagios加了Ndoutils插件后可以把数据存入到mysql里面,当时水平不到位,获取的数据有断链,原因不明)。 这些方法也都是大同小异,一般从nagios和zabbix获取的数据不太实时,当然你也可以配置间隔时间,但那样的话,会造成你的一些个配置的改变,以及可能会出现利用率高的情况。  每个人都有自己的一套做法,我这边给大家再扩展出一个方案   salstack api的方式 !


       请多关注下我的个人博客, 更多运维研发及python, blog.xiaorui.cc


      saltstack 我也做过类似的方案,有些朋友可能看到我写的grains returners的方法 ~  其实也是可以的,需要说明的是 grains 的数据,一般是启动minion的时候获取的,不太好做实时。 returners的话,是采用回调的方法,也就是说 我把想要的数据交给minion处理,这家伙搞到数据后,往另一个接口扔数据。我这个时候想看数据的话,就从库里面看,比如他扔给redis,我就从redis里面看 ~


有需求的朋友可以先瞅瞅我以前写的例子,大家要是觉得那里不对,咱们讨论下哈


websocket的模式:

http://rfyiamcool.blog.51cto.com/1030776/1269232


redis pub sub的模式:

(咱们的saltstack api的模式也是属于pubsub的模式~)

http://rfyiamcool.blog.51cto.com/1030776/1272629


第三方监控的扩展模式:

比如nagios的ndoutils插件~   可以简单的mysql sql语句就可以获取数据 ~

获取监控项目

-------------------------------+------------------- 192.168.15.178 | CPU 192.168.15.178 | Current Load 192.168.15.178 | Current Users 192.168.15.178 | HTTP 192.168.15.178 | PING 192.168.15.178 | Qcache_free 192.168.15.178 | Root Partition 192.168.15.178 | SSH 192.168.15.178 | system swap 192.168.15.178 | Total Processes localhost | CPU

为啥用saltstack api

    原因就是好用,返回的结果也是可控的,是json的数据,好拆分!    一开始刚用saltstack做测试的时候,数据的前端页面数据渲染都是用的subprocess的模块,搓的要命。


   有了接口,咱们可以做多线程的操作,当然saltstack本身确实是多进程的模式,用的multiprocess的模块。 在终端下肯定是好的,但是在这里不太适用,毕竟咱们是有啥数据,先返回,而不是等所有数据都搞到手了,才渲染页面。


原文http://rfyiamcool.blog.51cto.com/1030776/1345518



简单描述下他的实现思路:


利用saltstack api 获取数据,然后插入到数据库里面,然后前端从后端来获取数据。


做这个东西,需要点其他的支撑,比如 基础的集群saltstack的使用,数据库的使用,前端样式的使用。 这些还算好学的,搜搜网上的文档也都可以搞定。



图表的数据暂时是模拟的,环境有点问题,我就简单模拟了一个server ! 原理都是那么回事 !


图表的实现方式: 用sparkline实现的


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"     "http://www.w3.org/TR/html4/strict.dtd"> <head>     <script type="text/javascript" src="jquery-1.7.2.js"></script>     <script type="text/javascript" src="jquery.sparkline.js"></script>     <script type="text/javascript">     $(function() {         /** This code runs when everything has been loaded on the page */         /* Inline sparklines take their values from the contents of the tag */         $('.inlinesparkline').sparkline();         /* Sparklines can also take their values from the first argument         passed to the sparkline() function */         var myvalues = [10,8,5,7,4,4,1];         $('.dynamicsparkline').sparkline(myvalues);         /* The second argument gives options such as chart type */         $('.dynamicbar').sparkline(myvalues, {type: 'bar', barColor: 'green'} );         /* Use 'html' instead of an array of values to pass options         to a sparkline with data in the tag */         $('.inlinebar').sparkline('html', {type: 'bar', barColor: 'red'} );     });     </script> </head> <body> <p> Inline Sparkline: <span class="inlinesparkline">1,4,4,7,5,9,10</span>. </p> <p> Sparkline with dynamic data: <span class="dynamicsparkline">Loading..</span> </p> <p> Bar chart with dynamic data: <span class="dynamicbar">Loading..</span> </p> <p> Bar chart with inline data: <span class="inlinebar">1,3,4,5,3,5</span> </p> </body> </html>

先放一个demo,这两天把项目的细节写出来 !!!

有关利用saltstack的api接口和modules实现实时监控的更多相关文章

  1. ruby - Facter::Util::Uptime:Module 的未定义方法 get_uptime (NoMethodError) - 2

    我正在尝试设置一个puppet节点,但ruby​​gems似乎不正常。如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它工作正常,但如果我通过由ruby​​gems(/usr/bin/facter)安装的二进制文件,它抛出:/usr/lib/ruby/1.8/facter/uptime.rb:11:undefinedmethod`get_uptime'forFacter::Util::Uptime:Module(NoMethodError)from/usr/lib/ruby

  2. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  3. ruby-on-rails - ActionController::RoutingError: 未初始化常量 Api::V1::ApiController - 2

    我有用于控制用户任务的Rails5API项目,我有以下错误,但并非总是针对相同的Controller和路由。ActionController::RoutingError:uninitializedconstantApi::V1::ApiController我向您描述了一些我的项目,以更详细地解释错误。应用结构路线scopemodule:'api'donamespace:v1do#=>Loginroutesscopemodule:'login'domatch'login',to:'sessions#login',as:'login',via::postend#=>Teamroutessc

  4. ruby - 为什么人们使用 `Module.send(:prepend, …)` ? - 2

    我正在学习如何在我的Ruby代码中使用Module.prepend而不是alias_method_chain,我注意到有些人使用send调用它(example):ActionView::TemplateRenderer.send(:prepend,ActionViewTemplateRendererWithCurrentTemplate)而其他人直接调用它(example):ActionView::TemplateRenderer.prepend(ActionViewTemplateRendererWithCurrentTemplate)而且,虽然我还没有看到任何人使用这种风格,但我从

  5. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  6. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  7. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  8. 基于C#实现简易绘图工具【100010177】 - 2

    C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.

  9. ruby-on-rails - Mandrill API 模板 - 2

    我正在使用Mandrill的RubyAPIGem并使用以下简单的测试模板:testastic按照Heroku指南中的示例,我有以下Ruby代码:require'mandrill'm=Mandrill::API.newrendered=m.templates.render'test-template',[{:header=>'someheadertext',:main_section=>'Themaincontentblock',:footer=>'asdf'}]mail(:to=>"JaysonLane",:subject=>"TestEmail")do|format|format.h

  10. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

随机推荐