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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/981127.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

20250227解决飞凌OK3588-C的linux R4通过adb拷贝文件速度过慢的问题

20250227解决飞凌OK3588-C的linux R4通过adb拷贝文件速度过慢的问题 2025/2/27 16:51 缘起&#xff1a;最近测试OK3588-C的最新的R1版本的SDK&#xff0c;adb pull的速度为28.8 MB/s Z:\version\OK3588-C_Linux5.10.209Qt5.15.10_用户资料_R1 我司使用4线的USB2.0&#xff0c;…

cesium+vue3自定义HTML实体弹窗、加高德路网、防实体漂浮、让用户画圆、鹰眼

一、基础使用&#xff1a;Cesium.js基础使用&#xff08;vue&#xff09;-CSDN博客 1、基础路径 为 Cesium 库设置一个全局变量 CESIUM_BASE_URL&#xff0c;用于指定 Cesium 的资源文件&#xff08;如 WebGL shaders、纹理、字体等&#xff09;的 示例场景&#xff1a;假设你…

C# Unity 唐老狮 No.4 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…

Docker 学习(二)——基于Registry、Harbor搭建私有仓库

Docker仓库是集中存储和管理Docker镜像的平台&#xff0c;支持镜像的上传、下载、版本管理等功能。 一、Docker仓库分类 1.公有仓库 Docker Hub&#xff1a;官方默认公共仓库&#xff0c;提供超过10万镜像&#xff0c;支持用户上传和管理镜像。 第三方平台&#xff1a;如阿里…

Oracle 数据库基础入门(四):分组与联表查询的深度探索(上)

在 Oracle 数据库的学习进程中&#xff0c;分组查询与联表查询是进阶阶段的重要知识点&#xff0c;它们如同数据库操作的魔法棒&#xff0c;能够从复杂的数据中挖掘出有价值的信息。对于 Java 全栈开发者而言&#xff0c;掌握这些技能不仅有助于高效地处理数据库数据&#xff0…

Lua | 每日一练 (4)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 Lua | 每日一练 (4)题目参考答案线程和协程调度方式上…

我代表中国受邀在亚马逊云科技全球云计算大会re:Invent中技术演讲

大家好我是小李哥&#xff0c;本名叫李少奕&#xff0c;目前在一家金融行业公司担任首席云计算工程师。去年5月很荣幸在全球千万名开发者中被选为了全球亚马逊云科技认证技术专家&#xff08;AWS Hero&#xff09;&#xff0c;是近10年来大陆地区仅有的第9名大陆专家。同时作为…

C++蓝桥杯基础篇(七)

片头 嗨~小伙伴们&#xff0c;大家好&#xff01;今天我们来一起学习蓝桥杯基础篇&#xff08;七&#xff09;&#xff0c;学习相关字符串的知识&#xff0c;准备好了吗&#xff1f;咱们开始咯&#xff01; 一、字符与整数的联系——ASCII码 每个常用字符都对应一个-128~127的…

显式 GC 的使用:留与去,如何选择?

目录 一、什么是显式 GC&#xff1f; &#xff08;一&#xff09; 垃圾回收的基本原理 &#xff08;二&#xff09;显式 GC 方法和行为 1. System.gc() 方法 2. 显式 GC 的行为 &#xff08;三&#xff09;显式 GC 的使用场景与风险 1. JVM 如何处理显式 GC 2. 显式 GC…

2025.03.03(第一天)

1、常见的高危端口号有哪些&#xff0c;并涉及到哪些攻击方式 端口号服务常见攻击方式21FTP匿名登录、文件上传漏洞22SSH暴力破解、密钥泄露、中间人攻击53DNSDNS劫持、DNS缓存投毒、DDoS放大攻击80/443HTTP/HTTPSSQL注入1433MSSQL暴力破解、SQL注入、远程代码执行3306MySQLSQ…

MySQL数据库基本概念

目录 什么是数据库 从软件角度出发 从网络角度出发 MySQL数据库的client端和sever端进程 mysql的client端进程连接sever端进程 mysql配置文件 MySql存储引擎 MySQL的sql语句的分类 数据库 库的操作 创建数据库 不同校验规则对查询的数据的影响 不区分大小写 区…

确保移动设备上机器学习的安全性:挑战与最佳实践

随着企业不断推出更智能、个性化且响应迅速的体验&#xff0c;AI处理能力在移动设备中的普及&#xff0c;促使了机器学习&#xff08;ML&#xff09;本地集成的应用和SDK的快速发展。2024年谷歌I/O大会报告中强调了这一趋势&#xff0c;谷歌鼓励开发者在移动应用中使用本地机器…

【Mac】2025-MacOS系统下常用的开发环境配置

早期版本的一个环境搭建参考 1、brew Mac自带终端运行&#xff1a; /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" Installation successful!成功后运行三行命令后更新环境&#xff08;xxx是mac的username&a…

计算机毕业设计SpringBoot+Vue.js美食推荐系统商城(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

【Linux网络#14】:数据链路层(以太网 局域网通信 ARP协议 ARP 欺骗 DDos 攻击)

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 生活总是不会一帆风顺&#x…

001-码云操作

码云操作 一、配置公钥1.官网地址1.进入 git bash2.查看生成的公钥3.设置到 Gitee4.测试 二、初始化一个项目1.新建仓库 一、配置公钥 方便后续提交代码不用填写密码 1.官网地址 官网地址&#xff1a;https://gitee.com/Git码云教程&#xff1a;https://gitee.com/help/arti…

Android 获取jks的SHA1值:java.io.IOException: Invalid keystore format

命令生成 keytool -list -v -keystore 全路径.jks -alias 别名 -storepass 密码 -keypass 密码 1、遇到 的问题&#xff1a; 通过快捷键 ‘win r’ 启动的小黑框运行上面的命令会出现下面这个错误keytool 错误: java.io.IOException: Invalid keystore format 2、解决问题 …

项目准备(flask+pyhon+MachineLearning)- 1

目录 这是一篇学习笔记 1. 搭建项目 2.前期准备工作 3.创建用户(user)模板 这是一篇学习笔记 目的&#xff1a;用flask快速实现发布有关机器学习的项目&#xff0c;掌握flask框架&#xff0c;机器学习模型的存储和调用。 1. 搭建项目 使用pycharm创建项目&#xff0c;fl…

DeepSeek开源周Day5: 3FS存储系统与AI数据处理新标杆

项目地址&#xff1a; GitHub - deepseek-ai/3FS: A high-performance distributed file system designed to address the challenges of AI training and inference workloads.GitHub - deepseek-ai/smallpond: A lightweight data processing framework built on DuckDB and…

火语言RPA--PDF提取图片

【组件功能】&#xff1a;提取PDF文档指定位置图片 配置预览 配置说明 文件路径 支持T或# 默认FLOW输入项 待提取图片的PDF文件的完整路径。 提取位置 全部、指定页、指定范围3种位置供选择。 PDF文件密码 支持T或# 打开PDF文件的密码。 页码 支持T或# 提取指定页的页…