第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

利用物聯(lián)網設備收集硬件指標:一份詳盡指南

標簽:
云計算

在你自己搭建的物联网栈中,几个应用负责提供、解析和存储数据。你可能把这些应用都安装在同一台或多台机器上。你可能有不同的传感器提供数据,使用不同的方法来访问和存储数据。对于一个业余项目来说,这些都还好,直到系统出问题为止。

首先应该检查所有系统和传感器的指标。无论是传统的系统还是单板计算机系统,都可以查询其负载、内存和磁盘使用情况、网络使用情况。传感器可以查询其功耗和计算周期。所有这些都可以检查其是否活跃。但是,如何收集这些指标呢?如何存储这些指标?如何访问这些指标——根据错误情况按需访问,或通过触发警报主动访问?

这篇文章的目标是提供关于DIY物联网堆栈中系统性指标收集和存储的简要概述和介绍。首先,我将提供一个指南,包括一系列问题,以帮助制定指标收集方法。其次,我将介绍几个具体的应用和系统,它们承担了收集、聚合和存储指标中的一项或几项任务。

本文最早发表在我的博客,请参阅admantium.com

(指标的收集和存储指南)

在您的物联网网络里,应用程序和技术栈决定了可用的指标,第一步是制作一份所有计算机和传感器的清单。

  1. 我都有哪些电脑?
  2. 我都有哪些传感器?
  3. 传感器的信息是怎么流到应用程序里的?(推送 vs. 拉取,即主动发送 vs. 被动接收)

一旦你找到答案后,你就能大致了解设备间的通信方式和数据交换过程。然后列出你想要记录的其他指标。

  1. 我是否想测量设备的整体活跃性?
  2. 对于我的计算机,哪些硬件指标是必须要监控的?
  3. 对于我的计算机,哪些额外的硬件指标是监控时有用的?
  4. 对于我的传感器,除了传感器数据外,哪些非传感器相关的软件指标有助于监控?
  5. 对于所有计算机指标,应该多久记录一次指标?
  6. 对于所有传感器指标,我们应该多久记录一次指标?

当你回答完这些问题后,拼图的最后一块就是决定度量收集与存储系统的选定。

  1. 这些指标是哪个系统收集的?
  2. 指标系统是采用推送式还是拉取式来收集数据的?
  3. 这些指标数据会保存多久?
  4. 多个系统收集的数据是否应该汇总到一台机器上?

当你理解了度量系统时,你可能会发现你想要收集的度量指标、度量系统能记录的数据以及它们之间的数据流之间存在不匹配。也许你需要使用一个额外的系统,例如一个代理,来传递数据。或者度量数据在某些系统或传感器上可能根本无法获取。这形成了一种循环,你需要反复调整和优化,才能达到一个既可管理和可持续的概念。

实践:数据收集与存储

考虑了通用选项之后,我们来谈谈您在指标收集和存储方面的实际设计范围。你需要区分并考虑以下与指标收集相关的组件或角色:

  • 代理:负责从计算机或传感器收集指标的系统或过程。代理可以在产生指标的同一台机器上运行,也可以在另一台机器上运行并通过联系目标来获取指标。
  • 聚合器:聚合器协调代理收集指标,然后与存储系统连接,保存指标。
  • 存储:长期存储指标数据的存储

在考虑具体应用时,让我惊讶的是,有些系统正好符合单一角色,而其他系统则能扮演多个角色。以下是一些示例。请注意,这里列出的系统仅限于我了解并一直在使用的那些。

代理聚合器 CollectD X Node Exporter X SNMP X Telegraf X HomeAssistant X Node Red X StatsD X Prometheus X Graphite X InfluxDB X

在下面几节里,我们将简要讨论每个应用。

CollectD,一个数据收集工具

角色: 代理人

CollectD 是一款轻量级的 Linux 指标收集工具。它作为系统服务进行安装和配置,并提供大量的插件来收集各种指标。下面是一个收集 CPU 和磁盘指标的示例:

    主机名 "nexus"  
    时间间隔 60  

    插件 cpu  
    插件 disk  
    <插件 cpu>  
      按状态汇报 true  
      百分比值 true  
    </插件>  
    <插件 disk>  
      磁盘路径 "/sda1/"  
      磁盘路径 "/sda2/"  
    </插件>
Node Exporter

角色:代理

The Node exporter 是一款适用于各种指标收集的工具,适用于 Linux 系统。它以一个单一的可执行文件形式提供,并在其主机上暴露一个指标端点。这里举个例子:

    curl localhost:9000  

    # 说明:node_boot_time_seconds 是节点启动时间,以 Unix 时间表示。  
    # 类型:node_boot_time_seconds 是一个 gauge 类型的指标  
    node_boot_time_seconds 1.642755791e+09  
    # 说明:node_context_switches_total 是总的上下文切换次数。  
    # 类型:node_context_switches_total 是 counter 类型  
    node_context_switches_total 6.1337805256e+10  
    # 说明:node_cpu_seconds_total 表示 CPU 在每种模式下花费的秒数。  
    # 类型:node_cpu_seconds_total 是 counter 类型  
    node_cpu_seconds_total{cpu="0",mode="空闲"} 2.950242349e+07  
    node_cpu_seconds_total{cpu="0",mode="等待I/O"} 117189.98  
    node_cpu_seconds_total{cpu="0",mode="中断"} 0  
    node_cpu_seconds_total{cpu="0",mode="nice"} 1106.33  
    node_cpu_seconds_total{cpu="0",mode="软中断"} 24949.86  
    node_cpu_seconds_total{cpu="0",mode="被窃取"} 0  
    node_cpu_seconds_total{cpu="0",mode="系统"} 382452.13
SNMP(简单网络管理协议)

角色: 代理人

SNMP(简单网络管理协议,详情请参见此处)是一种较旧的协议,主要用于公开网络设备(如路由器、交换机和防火墙)的指标。支持SNMP的设备被称为,并查询时使用一种分层编号系统来结构化可用指标。例如,要查询系统15分钟的负载,你需要查询标识符1.3.6.1.4.1.2021.10.1.3,可以使用以下命令:

snmpwalk -v2c -c public localhost 1.3.6.1.4.1.2021.10.1.3.3  

UCD-SNMP-MIB::systemLoad.3 = Counter32: 0.4

注:以上命令及输出未翻译,因其为技术术语或命令输出,保持原样有助于在IT领域中的标准使用和理解。

Telegraf (注:Telegraf 为原文专有名词,未翻译)

身份:代理,聚合者

Telegraf 是一个高度可定制的,指标采集器和聚合器。

当以代理模式运行时,它从所有已配置的input插件收集数据。例如,这里有一个收集CPU和内存指标的基本配置:

    # 代表CPU的输入
    [[inputs.cpu]]  

    # 代表内存的输入
    [[inputs.mem]]  

    # 配置代理的设置
    [agent]  
      # 一个轮询间隔时间为60秒
      interval = "60秒"  
      # 是否将时间间隔四舍五入到最近的轮询间隔
      round_interval = true

作为聚合器,这里也有几个输出插件。这里是如何写入InfluxDB实例的例子:

    [[outputs.influxdb]]  
       urls = ["http://influxdb:8086"]  
       database = "telegraf"  
       write_consistency = "any"  
       timeout = "5s"  
       # HTTP Basic Auth  
       username = REDACTED  
       password = REDACTED
家庭助手

角色为:代理,聚合者

Home Assistant 是一个完全可定制的平台。它的主要作用是提供一个综合的仪表盘界面,用于连接各类传感器,这些传感器通过各种协议和技术连接。HA 还提供了自动化和脚本功能来定义程序,例如,当检测到移动时自动打开灯光,定义在传感器值变化时触发的程序。

HA可以通过在配置文件中激活systemmonitor模块来收集其主机的硬件指标信息:

    传感器:  
    - 平台: systemmonitor  
      资源:  
        - 类型: disk_use_percent  
          路径: /config  
        - 类型: disk_use  
        - 类型: disk_free  
        - 类型: memory_use_percent  
        - 类型: memory_use  
        - 类型: memory_free  
        - 类型: swap_use_percent  
        - 类型: swap_use  
        - 类型: swap_free  
        - 类型: load_1m  
        - 类型: load_5m  
        - 类型: load_15m  
        - 类型: processor_use  
        - 类型: processor_temperature  
        - 类型: last_boot

基本上,所有传感器数据都存储在内部数据库中。由于存在多种不同的传感器平台和技术,你只需将它们添加为称为 传感器 的项目,Home Assistant 就会开始聚合数据。例如,要监听 CPU 温度的 MQTT 消息,可以使用以下配置:

    - platform: mqtt  
      state_topic: '/node/nexus/cpu_temperatures'  
      name: 'CPU温度'  
      unit_of_measurement: '°C'
Node Red

角色:聚合

Node Red 是一个独特的应用程序,提供了图形化的编程环境。使用这个工具,你可以定义从输入到输出的转换过程,无论复杂程度如何,包括但不限于读取、解析、格式化和输出,并可根据需要添加条件判断。例如,这里是一个流程定义,用于解析MQTT JSON消息并判断节点是否存活,然后将这些信息存储到InfluxDB中:

StatsD指标

角色:聚合

StatsD 是一个轻量级的内存占用较小的指标聚合器。它通常通过 UDP 接收自定义的一行格式的数据,然后把这些数据转发给其他系统。

这里是从Github仓库中提取的一个示例配置,定义了statsd实例需要监听的端口或地址,以及度量服务器的配置信息。

// 源自: https://github.com/statsd/statsd/blob/master/exampleProxyConfig.js  
// 配置如下:  
{  
  nodes: [  
    {host: '127.0.0.1', port: 8127, adminport: 8128},  
    {host: '127.0.0.1', port: 8129, adminport: 8130},  
    {host: '127.0.0.1', port: 8131, adminport: 8132}  
  ],  
  server: './servers/udp',  
  host:  '0.0.0.0',  
  port: 8125,  
  udp_version: 'udp4',  
  mgmt_port: 8126,  
  forkCount: 0,  
  checkInterval: '检查时间间隔',  
  cacheSize: '缓存容量'  
}
普罗米修斯(Púluómǐxiūsī,希腊神话中的盗火者)

角色:聚合,存储器

Prometheus 是一种广泛应用于行业的生产级别的指标聚合工具。它提供了多种导出器来获取指标。例如,要抓取 node exporter 提供的指标,你需要添加如下抓取配置:

    - job_name: 'nodes'  
        static_configs:  
        - targets: ['http://nexus:9100']

这表示我们正在监控Nexus节点的指标。

社区还提供了其他聚合器,例如“还有其他的聚合器,例如mqtt-exporter这样的工具,它会监听MQTT消息并提供与Prometheus兼容的指标数据。”

普罗米修斯内置了一个时序数据库,用于存储所有收集的指标。可以通过组合指标名称、目标属性以及附加函数来查询数据。例如,参见一些普罗米修斯查询示例

石墨

角色:聚合,存储器

Graphite 由三个部分组成:Carbon(指标聚合器守护进程),Whisper(时间序列数据存储),这是一个使用内部 SQLite 数据库的数据存储;以及用于访问指标的 web 前端。

为了收集并通过 TCP 发送并以字符串 nodes 开头的指标,并在发送到数据库之前缓存 60 秒,需要定义如下配置:

    [stats]  
    pattern = ^nodes/.*  
    retentions = 60s:30d

要获取指标信息,通常使用控制面板,同时也允许通过文本进行查询。查询 CPU 负载总和的示例如下:

目标=aggregate(host.cpu.value, "sum") # 这表示聚合主机CPU值的总和
InfluxDB (InfluxDB 是一个时间序列数据库)

角色:商店

InfluxDB 是一个为高性能优化的时序数据库。InfluxDB 中的数据点由标签(离散数据)、字段(连续数据)和基于 Unix 时间戳索引组成。下面是一个温度数据表示的例子:

    > select * from cpu_temperatures limit 10  

    表名: cpu_temperatures  
    时间戳                节点名称        温度(℃)  
    ----                ----        -----------  
    1629979793360140718 raspberrypi 51.5  
    1629981542154078749 raspberrypi 52.6  
    1629981601660331504 raspberrypi 53.7

结论

收集您的物联网设备的硬件指标数据可以使用各种技术和协议实现。在本文的第一部分,我们提供了一套关于您想要达到的指标目标的指南和问题列表。通过明确监控哪些设备、收集哪些指标以及如何存储这些指标的连贯策略,您可以获得一个清晰的认识。在本文的第二部分,您了解了一些具体的用途和系统,并附有简短的使用案例。这些系统在收集、聚合和存储指标数据方面扮演着不同的角色。在接下来的文章中,我将具体介绍我在物联网堆栈架构中实现指标监控的方式。

點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優(yōu)質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優(yōu)惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消