Sensu Server是Sensu的核心组件,是Sensu业务逻辑实现的核心组件。
Server的启动
Sensu Server的入口在sensu/bin/sensu-server
options = Sensu::CLI.read
Sensu::Server::Process.run(options)
和这里Client几乎一样,解析命令行参数,调用Process.run
run方法也是,创建一个Server的服务实例,启动服务:server.start,然后处理信号
再看start方法
def start setup_redis setup_transport bootstrap end
setup_redis:连接redis;
setup_transport:连接RabbitMQ;
bootstrap:启动;
接下来看bootstrap方法
def bootstrap setup_keepalives setup_results setup_master_monitor @state = :running end
setup_keepalives:保持和客户端的联系:订阅客户端的注册的消息,当客户端注册过来(客户端每过20秒会注册自己),则将客户端添加到客户端队列里;
setup_results:订阅check的结果并处理结果;
setup_master_monitor:为保证server的HA定时选举master;
最后将该server的状态设置为running
这时候server就启动起来了
处理check结果
重点关注:process_check_result方法,该方法主要对check的结果存储,并对相同错误累计,并处理结果
def process_check_result(result) @logger.debug("processing result", :result => result) @redis.get("client:#{result[:client]}") do |client_json| # 找到result json里对应的client unless client_json.nil? client = MultiJson.load(client_json) check = case when @settings.check_exists?(result[:check][:name]) && !result[:check][:standalone] # 如果check不在配置里,且不为standalone check @settings[:checks][result[:check][:name]].merge(result[:check]) # 则添加一个check else result[:check] end aggregate_check_result(result) if check[:aggregate] # 如果需要聚合,聚合check结果,稍后再看 store_check_result(client, check) do # 存储check结果 check_history(client, check) do |history, total_state_change| # 计算状态改变百分比 check[:history] = history check[:total_state_change] = total_state_change # 创建一个事件,如果该次check失败,则增加该事件的失败次数,并记录,如果之前失败,这次成功,则删除该事件的失败记录 update_event_registry(client, check) do |event| process_event(event) # 调用handler处理事件 end end end else @logger.warn("client not in registry", :client => result[:client]) end end end
存储结果的方法:store_check_result
def store_check_result(client, check, &callback) @redis.sadd("history:#{client[:name]}", check[:name]) # 添加该check到该client的history里,如果已存在则忽略,history:#{client[:name]}包含了该client的所有check result_key = "#{client[:name]}:#{check[:name]}" history_key = "history:#{result_key}" @redis.rpush(history_key, check[:status]) do # 将check的结果push到历史队列里 @redis.set("execution:#{result_key}", check[:executed]) @redis.ltrim(history_key, -21, -1) # 只保存21条历史记录 callback.call end end
该方法将check的结果添加到历史队列里,即:redis的队列里。并且只保存21条历史记录。
处理事件方法:process_event,该方法获取事件里的handlers,并循环处理,在处理前会过滤和修改。
def process_event(event) log_level = event[:check][:type] == "metric" ? :debug : :info # 如果是metric,日志级别为debug @logger.send(log_level, "processing event", :event => event) event_bridges(event) handler_list = Array((event[:check][:handlers] || event[:check][:handler]) || "default") # 找到处理的handler(s) handlers = derive_handlers(handler_list) # 根据handler名字找到handler定义 handlers.each do |handler| # 循环处理 @handling_event_count += 1 filter_event(handler, event) do |event| # 过滤事件 mutate_event(handler, event) do |event_data| # 修改事件 handle_event(handler, event_data) # 处理事件 end end end end
handler的handle_event方法,记录日志,调用handler_type_router,该方法根据不同的处理类型调用不同的处理方法
def handler_type_router(handler, event_data) case handler[:type] when "pipe" pipe_handler(handler, event_data) when "tcp" tcp_handler(handler, event_data) when "udp" udp_handler(handler, event_data) when "transport" transport_handler(handler, event_data) when "extension" handler_extension(handler, event_data) end end
pipe_handler:执行配置的脚本,并日志记录结果;
tcp_handler:发送数据到handler配置的TCP主机和端口;
udp_handler:和tcp_handler一样,只是发送的时UDP包;
transport_handler:发布一个事件到RabbitMQ;
handler_extension:处理扩展;
相关推荐
docker-sensu-server, 在CentOS上,Sensu的一个 Dockerfile docker-sensu-serverCentOS和 sensu 。它运行 redis 。rabbitmq服务器。uchiwa 。sensu-api 。sensu服务器和ssh进程。安装从 Docker 索引安装或者从...
- hosts: my_sensu_server roles: - rabbitmq - redis - uchiwa - role: sensu sensu_install_server: true sensu_install_api: true # Client installation - hosts: my_client1 vars:
它由三个主要组件组成:Sensu Server、Sensu Client 和 Sensu API。Sensu Client 部署在被监控的主机上,负责收集系统指标并发送到Sensu Server。Sensu Server 处理这些数据,执行检查并触发警报。Sensu API 则为...
Sensu的核心组件包括:Sensu Server,负责处理检查请求和事件;Sensu Client,运行在被监控的节点上,执行检查并报告结果;以及Sensu API,提供数据接口供其他工具(如Ansible)进行交互。此外,还有诸如Uchiwa这样...
sensu-agent-severs的主机将仅安装sensu-agent并且将sensu-agent的backend-url的配置选项覆盖为ws://sensu-backend-server:8081 。 有关可用配置选项的更多信息,请检出和的上游文档。 --- - hosts : s
Sensu客户sensu客户端的便携式/嵌入式轻量级版本用法您可以通过两种不同的方式使用此项目。 第一种是将项目用作独立程序,并使用外部检查/指标。 第二种是将项目用作外部golang包,并使用另一种主要方法编写项目,并...
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-Plugins-kubernetes 功能性 这提供了检查节点和容器状态以及api和服务可用性的功能。 档案 bin / check-kube-nodes-ready.rb bin / check-kube-apiserver-available.rb bin / check-kube-pods-pending.rb ...
6. **服务器(Server)**:Sensu Server 负责接收代理发送的事件,处理这些事件,并根据配置的处理器进行响应。 7. **API 和 dashboard**:Sensu 提供了一个 RESTful API,允许与其他系统集成,如票务系统、自动化...
hubot 的 sensu 处理程序 关于 hubot_handler.rb : sensu 事件数据发布到 hubot 使用方法(感觉) cd /path/to/sensu/handlers wget ...请重新启动 sensu-server 如何使用(hubot
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 Server,API和客户端外,该角色还可以部署完整的堆栈: , 和。 但是,如果您要依靠其他角色/管理方法来部署/管理这些服务,。文献资料...
Sensu Go处理程序事件KeepAlive通过TTL Sensu Go Hangouts聊天处理程序是一个,它通过临时管理消息消息"level":"warning","msg":"check TTL expired"和"output": "Last check execution was xX seconds ago"后是否仍...
它包含sensu-api , sensu-client , sensu-server ,但不包含任何插件。 默认配置是使用redis作为传输。 这使我们不需要rabbitmq 。 可以将该容器配置为使用运行时系统信息来对其主机进行检查和度量。 笔记 目前...