概述
Sensu Client是运行在其监控的App Server上的,主要工作有:
1. 订阅rabbitMQ消息,接收来自Server端的check任务,执行任务,并返回结果给Server端(通过rabbitMQ);
2. 周期性执行客户端standalone的check,并返回结果给Server端(通过rabbitMQ);
3. 监听TCP端口和UDP端口,接收来自外部的监控数据,返回给Server端(通过rabbitMQ);
Sensu Client实现很简单,只有两个ruby文件:process.rb和socket.rb。
其中大部分逻辑都在process.rb中实现,socket.rb主要处理来自外部输入的监控数据。
Client的启动
Sensu client启动的入口在:
sensu/bin/sensu-client
源码:
options = Sensu::CLI.read Sensu::Client::Process.run(options)
读取命令行参数,然后调用Process.run()
再看Process.run方法,在sensu/lib/sensu/client/process.rb文件
def self.run(options={}) client = self.new(options) EM::run do client.start client.setup_signal_traps end end
先实例化了一个Sensu.Client.Process对象,接下来EM事件循环里:启动client,设置信号处理。关于EM:http://blog.csdn.net/resouer/article/details/7975550
我们主要看看client.start
def start setup_transport setup_sockets bootstrap end
setup_transport是和rabbitMQ建立连接;
setup_sockets则是监听本地TCP端口和UDP端口以便接收来自外部的数据,具体看代码:sensu/lib/sensu/client/socket.rb,主要工作是接收外部数据,进行一系列的检查,通过后发送到rabbitMQ;
接下来看:bootstrap
def bootstrap setup_keepalives setup_subscriptions setup_standalone @state = :running end
setup_keepalives是为了使server端知道client是出于活动状态的一个周期性任务;
setup_subscriptions订阅rabbitMQ消息,当消息到来时,将消息解析成一个check,然后执行这个check并返回结果;
setup_standalone是启动一个定时任务执行standalone的check脚本(有些check不是从服务端订阅的,而是只是在某个客户端运行的)
最后将状态改成running
执行check
最后我们重点看下执行check命令
def execute_check_command(check) @logger.debug("attempting to execute check command", :check => check) unless @checks_in_progress.include?(check[:name]) # check是否已经在执行 @checks_in_progress << check[:name] # 加入check队列 command, unmatched_tokens = substitute_check_command_tokens(check) # 替换token??? if unmatched_tokens.empty? check[:executed] = Time.now.to_i # 执行时间 started = Time.now.to_f Spawn.process(command, :timeout => check[:timeout]) do |output, status| # 新建进程执行命令,有timeout check[:duration] = ("%.3f" % (Time.now.to_f - started)).to_f # 执行时间 check[:output] = output # 输出 check[:status] = status # 状态码 publish_check_result(check) # 发布执行结果 @checks_in_progress.delete(check[:name]) # 从执行队列中删除 end else # 如果有些token不匹配,直接报错 check[:output] = "Unmatched command tokens: " + unmatched_tokens.join(", ") check[:status] = 3 check[:handle] = false publish_check_result(check) @checks_in_progress.delete(check[:name]) end else @logger.warn("previous check command execution in progress", :check => check) end end
该方法执行了check命令,并将结果发布到rabbitMQ。
相关推荐
Sensu Client已配置为监视主机的运行状况。 Sensu Client还监视计算机上运行的Monit作业的运行状况。 一个BOSH作业来安装 。 默认情况下,“收集的”配置为通过Sensu发送度量标准数据。 收集发送有关主机生命...
独立项目最简单的入门方法是从命令行下载二进制文件: Linux $ curl -sL https://github.com/upfluence/sensu-client-go/releases/download/v0.0.1/sensu-client-go-linux-amd64-0.0.1 \ > sensu-client$
安装和配置 Sensu 和 Uchiwa 仪表板的 Ansible 角色。 角色的配置是以这样一种方式完成的,即不需要为任何类型的配置更改角色。 所有这些都可以通过更改角色参数或通过将全新配置声明为变量来完成。 这使得这个角色...
Sensu Client,运行在被监控的节点上,执行检查并报告结果;以及Sensu API,提供数据接口供其他工具(如Ansible)进行交互。此外,还有诸如Uchiwa这样的可视化界面,用于展示Sensu收集到的监控数据。 在"**sensu-...
docker-sensu-server, 在CentOS上,Sensu的一个 Dockerfile docker-sensu-serverCentOS和 sensu 。它运行 redis 。rabbitmq服务器。uchiwa 。sensu-api 。sensu服务器和ssh进程。安装从 Docker 索引安装或者从...
它由三个主要组件组成:Sensu Server、Sensu Client 和 Sensu API。Sensu Client 部署在被监控的主机上,负责收集系统指标并发送到Sensu Server。Sensu Server 处理这些数据,执行检查并触发警报。Sensu API 则为...
sensu-agent-severs的主机将仅安装sensu-agent并且将sensu-agent的backend-url的配置选项覆盖为ws://sensu-backend-server:8081 。 有关可用配置选项的更多信息,请检出和的上游文档。 --- - hosts : s
Dockerfile 来创建一个 Sensu 服务器 这是旧的和被破坏的,除了本地测试之外,您可能不应该将它用于任何其他目的。 考虑到它使用的是旧版本的 Sensu,您可能根本不应该使用它。 这仅用于测试 - 未为服务器和客户端...
运行命名检查[ root@server (:) ~ :) ] ./sensu_checks.rb check_ntpNo checks in /etc/sensu/conf.d/client.json... ignoredRunning check_ntp... /etc/sensu/plugins/system/check-ntp.rb -w 100 -c 500 CheckNTP ...
Sensu是用于临时基础结构和分布式应用程序的开源监视工具。 它是具有内置自动发现功能的基于代理的监视系统,非常适合云环境。 Sensu使用服务检查来监视服务运行状况并收集遥测数据。 它还具有许多定义良好的API,...
:warning_selector: 公告-Sensu 1.x已停产(2019年12月31日) Sensu 1.x项目已在2019年12月31日终止使用。现有的软件包存储库在2020年1月6日变得无法访问。有关更多详细信息,请参阅我们的博客文章: : Sensu 1.x...
sensu-grafana-mutator 目录 概述 sensu-grafana-mutator是一个 ,用于解析事件标签并生成一个或多个event_check.annotations(以_url结尾),并具有一定的时间范围,从而使sysadmin的工作更加轻松,从而开始进行...
一组sensu docker容器,可帮助预配置docker容器的自动检查 用法 本指南假定您已经有适当的Sensu传输服务器正在运行并且Redis数据存储。 如果您是第一次尝试,可以使用以下简单命令启动redis和rabbitmq容器: ...
sensu-grid, 为"big" 屏幕构建的sensu仪表板 sensu网格Flask 应用程序连接到 sensu-api服务器列表,并显示一个确定。警告。关键。关闭的网格。特性按数据中心概述( 名称,确定,警告,暴,关机,ACK )数据中心的详细...
《Sensu Handler Kafka Metrics Graphite:连接监控与数据流的桥梁》 Sensu Handler Kafka Metrics Graphite 是一个基于 Ruby 开发的监控系统组件,它巧妙地将 Sensu 的监控事件处理与 Kafka 消息队列以及石墨...
它包含sensu-api , sensu-client , sensu-server ,但不包含任何插件。 默认配置是使用redis作为传输。 这使我们不需要rabbitmq 。 可以将该容器配置为使用运行时系统信息来对其主机进行检查和度量。 笔记 目前...
Sensu Go处理程序事件KeepAlive通过TTL Sensu Go Hangouts聊天处理程序是一个,它通过临时管理消息消息"level":"warning","msg":"check TTL expired"和"output": "Last check execution was xX seconds ago"后是否仍...
森苏每个组件的 Dockerfiles 和用于设置 Sensu 服务器的 Docker Compose 文件。安装 Docker 按照适用于您平台的 docker 站点上的说明进行操作。我建议为 Ubuntu 使用 Docker 维护的存储库,并且在 OSX 上支持/将不...
sensu-flapjack-install 这是一套针对Ubuntu 14.04(Trusty)的脚本,让Sensu和Flapjack的安装和配置更加完善。 在成为 Nagios 用户 15 年的大部分时间后,我可以... cd /tmp/sensu/ sh install.client.sh 完毕!
su木偶 目录 模块说明 安装和管理开源监控框架 。...Sensu Go 5.x是Sensu的重写,不再依赖redis和Rabbitmq。 此模块的版本3支持Sensu Go> = 5.0.0至<5> = 5.16.0 <6> = 6.0.0 <6> = 6.1.0 <7.0.0。 希望使用以前