当前位置: 首页 > news >正文

Observability:使用 Elastic Agent 跟踪你的 Steam Deck 游戏

作者:来自 Elastic AndersonQ

让我们以不同的方式看待可观察性,并使用我们最喜欢的工具来监控我们的游戏性能。今天,我们将探讨如何使用 Elastic Agent 来监控 Steam Deck,以便我们可以看到我们玩得最多的游戏、它们消耗了多少资源以及 GPU 的表现如何。

我们将介绍:

  • 安装 Elastic Agent
  • 设置集成
  • 使用自定义 API 集成来收集自定义数据
  • 构建 Kibana 仪表板
  • 导出和导入仪表板

处理数据

系统集成(System Integration)为我们提供了有关正在运行的进程、其名称以及它们使用的 CPU 和内存量的所有数据。我们将使用它来查看该过程使用了多少资源以及查看我们玩得最多的游戏。

GPU 数据

一般来说,可观测性数据不包括 CPU 或 GPU 核心的执行情况。虽然可以收集 NVIDIA GPU 数据,但 Steam Deck 使用定制的 AMD GPU,我们想自己亲自动手做一些工作。

Linux 发行版通常包含 lm_sensors,它存在于 Steam OS 上,为我们提供所需的所有信息。

在我的 Steam Deck 上运行 sensors,我得到以下结果:

nvme-pci-0100
Adapter: PCI adapter
Composite:    +45.9°C  (low  = -273.1°C, high = +82.8°C)
                       (crit = +84.8°C)
Sensor 1:     +45.9°C  (low  = -273.1°C, high = +65261.8°C)
 
BAT1-acpi-0
Adapter: ACPI interface
in0:           8.40 V  
curr1:         1.74 A  
 
amdgpu-pci-0400
Adapter: PCI adapter
vddgfx:      650.00 mV 
vddnb:       655.00 mV 
edge:         +44.0°C  
slowPPT:       7.12 W  (avg =  11.10 W, cap =  15.00 W)
fastPPT:      11.10 W  (cap =  15.00 W)
 
steamdeck_hwmon-isa-0000
Adapter: ISA adapter
PD Contract Voltage:   5.00 V  
System Fan:             0 RPM
Battery Temp:         +25.0°C  
PD Contract Current: 1000.00 mA 
 
acpitz-acpi-0
Adapter: ACPI interface
temp1:        +54.0°C  (crit = +105.0°C)

我们所需要的一切都在那里,但是并不是以最佳格式来获取这些数据,让我们使用 sensors -j 获取一个JSON:

{
   "nvme-pci-0100":{
      "Adapter": "PCI adapter",
      "Composite":{
         "temp1_input": 31.850,
         "temp1_max": 82.850,
         "temp1_min": -273.150,
         "temp1_crit": 84.850,
         "temp1_alarm": 0.000
      },
      "Sensor 1":{
         "temp2_input": 31.850,
         "temp2_max": 65261.850,
         "temp2_min": -273.150
      }
   },
   "BAT1-acpi-0":{
      "Adapter": "ACPI interface",
      "in0":{
         "in0_input": 8.656
      },
      "curr1":{
         "curr1_input": 0.159
      }
   },
   "amdgpu-pci-0400":{
      "Adapter": "PCI adapter",
      "vddgfx":{
         "in0_input": 0.650
      },
      "vddnb":{
         "in1_input": 0.655
      },
      "edge":{
         "temp1_input": 41.000
      },
      "slowPPT":{
         "power1_average": 2.072,
         "power1_input": 2.040,
         "power1_cap": 15.000
      },
      "fastPPT":{
         "power2_average": 2.072,
         "power2_cap": 15.000
      }
   },
   "steamdeck_hwmon-isa-0000":{
      "Adapter": "ISA adapter",
      "PD Contract Voltage":{
         "in0_input": 5.000
      },
      "System Fan":{
         "fan1_input": 1522.000,
         "fan1_fault": 0.000
      },
      "Battery Temp":{
         "temp1_input": 25.000
      },
      "PD Contract Current":{
         "curr1_input": 1.000
      }
   },
   "acpitz-acpi-0":{
      "Adapter": "ACPI interface",
      "temp1":{
         "temp1_input": 42.000,
         "temp1_crit": 105.000
      }
   }
}

我们不能让 Elastic Agent 运行任意命令并解析输出,因此,为了使这些数据可用,我们需要一个可以获取这些数据的小型 HTTP 服务器。

我已经用 Go 构建了一个,请继续前往 GitHub - AndersonQ/steamdeck-sensors-api 并安装它或构建你自己的版本。

通过该服务器,我们可以配置 Elastic Agent 来从我们刚刚创建的 API 中收集数据。为了确保它始终正常运行,steamdeck-sensors-api 可以安装并将自身注册为 systemd 服务。

现在我们已经拥有了所需的所有数据,让我们来收集它们。

收集数据

继续安装 Elastic Agent。默认情况下,System 集成被添加到任何 Elastic 代理策略中。继续创建一个策略,我将我的策略称为 Steam Deck,并将一个 Elastic Agent 添加到你的 Steam Deck。

查看常见问题解答,了解如何使用 sudo steamos-readonly disable 禁用只读模式。顺便问一下,你忘记了 sudo 密码吗?你可以轻松重置它,请在此处查看如何重置。

现在我们有了代理和策略,我们可以添加和配置自定义 API 集成。转到 Management > Integrations 并搜索 “custom api”:

将其添加到你的 Steam Deck 策略并进行配置:

  • "Dataset name" 设置为 system.gpu
  • "Request URL": http://localhost:4242/gpu
  • "Request Interval": :30秒 - 如果你愿意,可以选择其他间隔时间。为了开始使用并测试可视化效果,我使用的是 1秒,这样可以实时看到新数据。
  • "Request HTTP Method": GET
  • "Processors":
- decode_json_fields:
    fields: ["message"]
    target: "system.gpu"
    overwrite_keys: true
    add_error_key: true
    expand_keys: true

处理器对于正确格式化最终事件至关重要。如果没有它,steamdeck-sensors-api 响应将是 messsage 字段中的字符串。

现在保存并将集成添加到你的 Steam Deck 策略。如果你已经安装了代理,它将自动部署新更新的策略,如果你尚未安装,请去安装代理。

检查数据

转到发现,选择 metrics-* 数据视图。过滤 event.dataset :"system.process"。然后,添加 process.name、system.process.cpu.total.pct 和system.process.memory.size。在你的 Steam Deck 上打开一些游戏并尝试在所有 process metrics 中找到它。 🙂

对于 GPU 数据,请转到 logs-* 数据视图并过滤 event.dataset:“system.gpu”

现在我们只需要创建一个仪表板。

Steam Deck 仪表板

这是我创建的仪表板:

你可以直接导入我 GitHub 仓库里的这个仪表板,稍后我会告诉你如何导入。不过在此之前,我们先看看如何创建一个仪表板,并往里面添加一个可视化。

前往 Dashboards > Create dashboard

  1. 在查询栏中,添加一个过滤条件,仅显示来自你 Steam Deck 的数据。
    过滤条件:host.hostname: "steamdeck"(如果你在设备上修改了主机名,请根据实际情况调整)。
  2. 点击 Create visualization
  3. 选择 metrics-* 数据视图
  4. 搜索 process.cpu
  5. system.process.cpu.total.pct 拖到可视化区域

它会生成一个类似这样的图表:

接下来:

  1. 前往右侧的 Breakdown 面板
  2. 选择 process.name 作为分解维度
  3. Number of values 设置为 15
  4. 关闭面板

然后,把可视化类型从 Bar 改为 Treemap

它应该是这样的:

接着,点击右上角的 Save and Return,将可视化保存到仪表板中。

这样,你的仪表板上就有一个展示 Steam Deck 上各个进程 CPU 使用情况的 Treemap 了! 🎉

好的,现在我们来创建一个用于查看最常玩游戏的可视化。具体步骤如下:

  1. 点击 Create Visualization

  2. 在顶部搜索栏中,添加以下过滤条件:

    process.working_directory.text: "/home/deck/.local/share/Steam/steamapps/common/*"

    这个过滤条件会将进程指标限定为工作目录/home/deck/.local/share/Steam/steamapps/common/* 下的进程,这应该是你所有已安装游戏的路径。

    ⚠️ 注意
    如果你的游戏安装在 SD 卡或其他位置,这个路径可能不同。
    如果这个过滤条件没返回数据,你可以先到 Discover 里查看进程指标,找到游戏进程,确认它们实际使用的 process.working_directory 路径,然后再调整过滤条件。

  3. process.name 拖到可视化的拖放区域

  4. 将可视化类型设置为 Tag cloud(标签云)

  5. 点击 “Top 5 values of process.name”,把 Number of Values 改成 15

  6. 关闭右侧的配置面板

  7. 点击 Save and Return

💡 在点击 “Save and Return” 之前,你应该看到一个显示最多15个游戏进程名称的标签云。

仪表板将如下所示:

要使用 GPU 数据构建可视化,请选择 logs-* 数据视图并过滤 event.dataset:“system.gpu”,如下所示:

好的!我会把其他可视化的创建留作练习 😉

导入和导出仪表板

你可以使用 Kibana Saved Objects API 来导入和导出仪表板,步骤如下:

curl -u USER:PASSWORD -X POST -H 'Content-Type: multipart/form-data' -H 'kbn-xsrf: true'  YOUR-KIBANA-HOST/api/saved_objects/_import\?createNewCopies\=true --form file=@steam-deck-dashboard.ndjson

获取要在此处导入的仪表板。

要导出仪表板,请使用

curl -u USER:PASSWORD -X POST -H 'Content-Type: application/json' -H 'kbn-xsrf: true' YOUR-KIBANA-HOST/api/saved_objects/_export \
-H "Content-Type: application/json; Elastic-Api-Version=2023-10-31" \
-H "kbn-xsrf: string" \
-d '{"objects":[{"id":"YOUR-DASHBOARD-ID","type":"dashboard"}],"excludeExportDetails":true,"includeReferencesDeep":true}' > steam-deck-dashboard.ndjson

要查找仪表板 ID,请打开仪表板,检查 URL,它将是这样的:

https://KIBANA-HOST/app/dashboards#/view/<dashboard-id>?

https://KIBANA-HOST/app/dashboards#/view/bfcd09b3-effe-4a65-b58b-b6c3d528cc3e?

结论

使用 Elastic Stack 监控我的 Steam Deck 非常有趣,可以深入了解其性能、游戏如何利用资源以及识别正在运行的程序和游戏二进制文件。

最重要的是,这是一种开始使用 Elastic Agent、提取监控数据以及创建可视化和仪表板的有趣方式。它还让我们了解到我们可以收集的大量数据,启发人们以不同的方式使用这些数据。微微一笑:

你可以在 Elastic Cloud 上免费试用,或者在 Docker 上轻松运行你自己的 Elastic Stack,或者下载并手动运行它。

现在你已经知道如何监控你的 Steam Deck 以及如何运行 Elastic Stack,为什么不自己尝试一下呢?

原文:Dec 5th, 2024: [EN] Keep track of your Steam Deck gaming with the Elastic Agent - Advent Calendar - Discuss the Elastic Stack

相关文章:

  • [杂学笔记] 封装、继承、多态,堆和栈的区别,堆和栈的区别 ,托管与非托管 ,c++的垃圾回收机制 , 实现一个单例模式 注意事项
  • 从零开始创建一个浏览器:技术挑战与实现路径
  • vmware centos 挂载windows 文件目录
  • Windows 10 下 SIBR Core (i.e. 3DGS SIBR Viewers) 的编译
  • 【对话推荐系统综述】A Survey on Conversational Recommender Systems
  • MySQL执行更新SQL流程
  • 如何将飞书多维表格与DeepSeek R1结合使用:效率提升的完美搭档
  • 电子电气架构 --- AI在整车产品领域的应用
  • springboot + mybatis-plus + druid
  • 【随手笔记】利尔达NB模组
  • 服务器配置-从0到分析4:ssh免密登入
  • 软考网络安全口诀
  • 紫光无人机AI飞控平台2.0——航线管理模块
  • Qt上位机编程命名规范-执行版
  • 1.从0搭建前端Vue项目工程
  • C++设计一:日期类Date实现
  • 使用Python或R语言重新拟合模型
  • js操作数组的常用方法
  • 8.路由原理专题
  • 外贸独立站使用wordpress模板与定制哪个SEO效果好
  • 大兴 网站建设/时事新闻最新
  • 现在淘客做网站还行吗/搜索引擎优化的方式有哪些
  • 自己制作微信小程序/长沙网站seo收费标准
  • seo是网站搜索引擎上的优化/百度渠道开户
  • 域名防红直连/seo推广公司价格
  • 哪个汽车网站汽贸店免费做/广州营销推广