{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Balyn Omavel: заметки с тегом monitoring",
    "_rss_description": "Balyn Omavel",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/www.omavel.in\/tags\/monitoring\/",
    "feed_url": "https:\/\/www.omavel.in\/tags\/monitoring\/json\/",
    "icon": "https:\/\/www.omavel.in\/pictures\/userpic\/userpic@2x.jpg?1694896121",
    "authors": [
        {
            "name": "Balyn Omavel 🍷",
            "url": "https:\/\/www.omavel.in\/",
            "avatar": "https:\/\/www.omavel.in\/pictures\/userpic\/userpic@2x.jpg?1694896121"
        }
    ],
    "items": [
        {
            "id": "18",
            "url": "https:\/\/www.omavel.in\/all\/ms-01-voltage-and-fan-metrics\/",
            "title": "Minisforum MS-01 — enabling voltage and fan metrics (Nuvoton NCT6798D)",
            "content_html": "<p>By default, on Proxmox kernel 6.8.12-15-pve, only CPU\/NVMe temperatures are available. <i>sensors-detect —auto<\/i> finds only coretemp, no Super I\/O support. The hardware (Nuvoton NCT6798D) requires the NCT6775 driver, which is not included in this kernel build.<\/p>\n<h2>Driver patching and installation<\/h2>\n<ol start=\"1\">\n<li>Install build tools and kernel headers<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">sudo apt update\r\nsudo apt install build-essential\r\nsudo apt install proxmox-headers-$(uname -r)<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">Preparing to unpack ...\/proxmox-headers-6.8.12-15-pve_6.8.12-15_amd64.deb ...\r\nUnpacking proxmox-headers-6.8.12-15-pve (6.8.12-15) ...\r\nSetting up proxmox-headers-6.8.12-15-pve (6.8.12-15) ...<\/code><\/pre><ol start=\"2\">\n<li>Download the NCT6775 driver<\/li>\n<\/ol>\n<p>⚠️ Do not use the abandoned killghost fork.<br \/>\nInstead, use the damix1\/nct6775 repo, which can be patched for newer chips.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">git clone https:\/\/github.com\/damix1\/nct6775.git \/root\/nct6775\r\ncd \/root\/nct6775<\/code><\/pre><ol start=\"3\">\n<li>Patch for Nuvoton NCT6798D support<\/li>\n<\/ol>\n<p>Edit <i>nct6775.c<\/i>. Extend the enum:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">enum kinds { nct6106, nct6775, nct6776, nct6779,\r\n             nct6791, nct6792, nct6793, nct6795,\r\n             nct6796, nct6798 };<\/code><\/pre><p>Add names:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">static const char * const nct6775_device_names[] = {\r\n    &quot;nct6106&quot;, &quot;nct6775&quot;, &quot;nct6776&quot;, &quot;nct6779&quot;,\r\n    &quot;nct6791&quot;, &quot;nct6792&quot;, &quot;nct6793&quot;, &quot;nct6795&quot;,\r\n    &quot;nct6796&quot;, &quot;nct6798&quot;,\r\n};\r\n\r\nstatic const char * const nct6775_sio_names[] __initconst = {\r\n    &quot;NCT6106D&quot;, &quot;NCT6775F&quot;, &quot;NCT6776D\/F&quot;, &quot;NCT6779D&quot;,\r\n    &quot;NCT6791D&quot;, &quot;NCT6792D&quot;, &quot;NCT6793D&quot;, &quot;NCT6795D&quot;,\r\n    &quot;NCT6796D&quot;, &quot;NCT6798D&quot;,\r\n};<\/code><\/pre><p>Add detection case:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">switch (val &amp; SIO_ID_MASK) {\r\n    ...\r\n    case 0xd42:   \/* NCT6798D *\/\r\n        sio_data-&gt;kind = nct6798;\r\n        break;\r\n}<\/code><\/pre><p>This minimal patch makes the driver recognize NCT6798D.<\/p>\n<ol start=\"4\">\n<li>Build and install<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">make clean\r\nmake<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">CC [M]  \/root\/nct6775\/nct6775.o\r\n\/root\/nct6775\/nct6775.c: In function 'is_word_sized':\r\n\/root\/nct6775\/nct6775.c:1335:9: warning: enumeration value 'nct6798' not handled in switch [-Wswitch]\r\n 1335 |         switch (data-&gt;kind) {\r\n      |         ^~~~~~\r\n\/root\/nct6775\/nct6775.c: In function 'nct6775_update_pwm_limits':\r\n\/root\/nct6775\/nct6775.c:1706:17: warning: enumeration value 'nct6798' not handled in switch [-Wswitch]\r\n 1706 |                 switch (data-&gt;kind) {\r\n      |                 ^~~~~~\r\n\/root\/nct6775\/nct6775.c: In function 'store_auto_pwm':\r\n\/root\/nct6775\/nct6775.c:3137:17: warning: enumeration value 'nct6798' not handled in switch [-Wswitch]\r\n 3137 |                 switch (data-&gt;kind) {\r\n      |                 ^~~~~~\r\n\/root\/nct6775\/nct6775.c: In function 'nct6775_probe':\r\n\/root\/nct6775\/nct6775.c:4322:9: warning: enumeration value 'nct6798' not handled in switch [-Wswitch]\r\n 4322 |         switch (data-&gt;kind) {\r\n      |         ^~~~~~\r\n\/root\/nct6775\/nct6775.c:4355:17: warning: enumeration value 'nct6798' not handled in switch [-Wswitch]\r\n 4355 |                 switch (data-&gt;kind) {\r\n      |                 ^~~~~~\r\n\/root\/nct6775\/nct6775.c: In function 'pwm_update_registers':\r\n\/root\/nct6775\/nct6775.c:2633:17: warning: this statement may fall through [-Wimplicit-fallthrough=]\r\n 2633 |                 nct6775_write_value(data, data-&gt;REG_TARGET[nr],\r\n      |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r\n 2634 |                                     data-&gt;target_temp[nr]);\r\n      |                                     ~~~~~~~~~~~~~~~~~~~~~~\r\n\/root\/nct6775\/nct6775.c:2636:9: note: here\r\n 2636 |         default:\r\n      |         ^~~~~~~\r\n  MODPOST \/root\/nct6775\/Module.symvers\r\n  CC [M]  \/root\/nct6775\/nct6775.mod.o\r\n  LD [M]  \/root\/nct6775\/nct6775.ko\r\n  BTF [M] \/root\/nct6775\/nct6775.ko\r\nSkipping BTF generation for \/root\/nct6775\/nct6775.ko due to unavailability of vmlinux<\/code><\/pre><p>Then:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">make install<\/code><\/pre><pre class=\"e2-text-code\"><code class=\"\">cp nct6775.ko \/lib\/modules\/6.8.12-15-pve\/kernel\/drivers\/hwmon\r\ndepmod -a -F \/boot\/System.map-6.8.12-15-pve 6.8.12-15-pve<\/code><\/pre><p>It copies nct6775.ko into hwmon\/ so the kernel can autoload it.<\/p>\n<p>Then:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">depmod -a\r\nmodprobe nct6775<\/code><\/pre><ol start=\"5\">\n<li>After loading the module, verify with <i>sensors<\/i><\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">nct6798-isa-0a20\r\nAdapter: ISA adapter\r\nin0:                   400.00 mV (min =  +0.00 V, max =  +1.74 V)\r\nin1:                     1.05 V  (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nin2:                     3.34 V  (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nin3:                     3.34 V  (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nin4:                     1.09 V  (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nin5:                   152.00 mV (min =  +0.00 V, max =  +0.00 V)\r\nin6:                   136.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nin7:                     3.34 V  (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nin8:                     3.14 V  (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nin9:                     1.02 V  (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nin10:                  160.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nin11:                  128.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nin12:                  1000.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nin13:                  152.00 mV (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nin14:                    1.27 V  (min =  +0.00 V, max =  +0.00 V)  ALARM\r\nfan1:                  2205 RPM  (min =    0 RPM)\r\nfan2:                  1732 RPM  (min =    0 RPM)\r\nfan3:                     0 RPM  (min =    0 RPM)\r\nfan4:                     0 RPM  (min =    0 RPM)\r\nfan5:                     0 RPM  (min =    0 RPM)\r\nfan7:                     0 RPM  (min =    0 RPM)\r\n...<\/code><\/pre><ol start=\"6\">\n<li>Add the driver to \/etc\/modules so it loads automatically on reboot<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">echo nct6775 | tee -a \/etc\/modules<\/code><\/pre><ol start=\"7\">\n<li>Regenerate the initramfs images<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">update-initramfs -u -k all<\/code><\/pre><h2>Handling secure boot (if enabled)<\/h2>\n<p>Unsigned modules will fail with <i>modprobe: ERROR: could not insert ’nct6775’: Key was rejected by service.<\/i><\/p>\n<ol start=\"1\">\n<li>Generate your own MOK key<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">openssl req -new -x509 -newkey rsa:2048 \\\r\n  -keyout \/root\/MOK.priv -outform DER -out \/root\/MOK.der \\\r\n  -nodes -days 36500 -subj &quot;\/CN=MyKernelModule\/&quot;<\/code><\/pre><ol start=\"2\">\n<li>Sign the module<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">\/usr\/src\/linux-headers-$(uname -r)\/scripts\/sign-file sha256 \\\r\n  \/root\/MOK.priv \/root\/MOK.der \\\r\n  \/lib\/modules\/$(uname -r)\/kernel\/drivers\/hwmon\/nct6775.ko<\/code><\/pre><ol start=\"3\">\n<li>Import the key and reboot<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">mokutil --import \/root\/MOK.der\r\nreboot<\/code><\/pre><p>⚠️ On reboot the blue MOK Manager screen will appear → Enroll MOK → Continue → enter password.<\/p>\n<ol start=\"4\">\n<li>Validation<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">modinfo nct6775 | grep signer\r\nsigner: MyKernelModule<\/code><\/pre><h2>Post scriptum<\/h2>\n<p>Node Exporter (should be runned with <i>—collector.hwmon<\/i>) will expose new metrics as:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">node_hwmon_in_volts{chip=&quot;nct6798-isa-0a20&quot;,sensor=&quot;in1&quot;}\r\nnode_hwmon_fan_rpm{chip=&quot;nct6798-isa-0a20&quot;,sensor=&quot;fan1&quot;}<\/code><\/pre><p><a href=\"https:\/\/grafana.com\/grafana\/dashboards\/12950-hwmon\/\">Grafana hwmon dashboard<\/a> should catch these metrics automatically.<\/p>\n",
            "date_published": "2025-09-20T23:46:35+04:00",
            "date_modified": "2025-09-21T01:19:52+04:00",
            "tags": [
                "homelab",
                "linux",
                "monitoring"
            ],
            "_date_published_rfc2822": "Sat, 20 Sep 2025 23:46:35 +0400",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "18",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        },
        {
            "id": "13",
            "url": "https:\/\/www.omavel.in\/all\/cim-studio\/",
            "title": "CIM Studio",
            "content_html": "<p>Это инструмент от <img width=\"13px\" src=\"http:\/\/omavel.in\/pictures\/Microsoft_logo.svg\" alt=\"Microsoft\"> для дебага WMI — он позволяет просматривать классы, пространства имен, методы. Тулза довольно старая, на сайте MS её уже не найти (раньше поставлялась в составе WMI SDK).<\/p>\n<p>Скачать WMI Tools: <a href=\"https:\/\/mega.nz\/file\/mzgWnJwb#vLixi88tjWz-3hyE3d57erukWHEJMHx7hbokaKxQvCc\">5Мб<\/a><\/p>\n<p>После установки WMI SDK, надо добавить в файл <tt>studio.htm<\/tt>, в секцию <tt>head<\/tt> следующий код:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">&lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=8&quot; \/&gt;<\/code><\/pre><p>По умолчанию файл находится в <tt>\\Program Files (x86)\\WMI Tools\\<\/tt><br \/>\nРаботает только в Internet Explorer.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/www.omavel.in\/pictures\/cim_studio.png\" width=\"1064\" height=\"787\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2022-02-26T17:02:24+04:00",
            "date_modified": "2022-02-26T17:02:13+04:00",
            "tags": [
                "monitoring",
                "windows"
            ],
            "image": "https:\/\/www.omavel.in\/pictures\/Microsoft_logo.svg",
            "_date_published_rfc2822": "Sat, 26 Feb 2022 17:02:24 +0400",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "13",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/www.omavel.in\/pictures\/Microsoft_logo.svg",
                    "https:\/\/www.omavel.in\/pictures\/cim_studio.png"
                ]
            }
        },
        {
            "id": "7",
            "url": "https:\/\/www.omavel.in\/all\/authentication-failed-invalid-credentials\/",
            "title": "Web Transaction Recorder",
            "content_html": "<p>Чуваки из <img src=\"http:\/\/omavel.in\/pictures\/solarwinds.jpg\" alt=\"SolarWinds\"> поспешили навесить ярлык «deprecated» на свою старую недоделку Web Transaction Recorder, хотя новый рекордер совершенно не готов к использованию в проде и покрывает только элементарные юзкейсы.<br \/>\nТем не менее, его приходится использовать, ибо в составе Orion других решений нет. В общем, если обмазать старые костыли красивым интерфейсом, конфетки не выйдет, но некий профит из этого можно извлечь.<\/p>\n<p>Если раньше аутентификация через Active Directory Federation Services впиливалась руками в xml-код транзакции, то теперь сам рекордер запросит у тебя креды при записи транзакции. Удобно. Запросит-то он запросит, а вот то, что FS передает кучу параметров в url, рекордера не волнует. Он запишет именно тот url, который был на момент записи. Вместе с таймстампом wct, вместе с уникальными wctx и client-request-id.<\/p>\n<p>То биш, в следующий раз, когда вы решите запустить транзакцию, вы столкнетесь с совершенно логичным<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">Authentication failed. \r\nInvalid credentials for тут%20у%20нас%20длинный%20урл%20со%20всеми%20параметрами \r\nClick the Key icon to update.<\/code><\/pre><p>Не поспоришь, для этого wct и request-id креды действительно не валидны. Key icon тут, кстати, не поможет, потому что не позволяет исправить сам url.<\/p>\n<h2>Что делать?<\/h2>\n<p>Просто убрать уникальные параметры, оставив целевой url в wtrealm и запулить его в goto. И перезаписать транзакцию заново, конечно. Спасибо, SolarWinds.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/www.omavel.in\/pictures\/goto.jpg\" width=\"286\" height=\"170\" alt=\"Так выглядит goto\" \/>\n<\/div>\n",
            "date_published": "2020-07-17T22:05:58+04:00",
            "date_modified": "2020-07-17T22:10:35+04:00",
            "tags": [
                "monitoring",
                "solarwinds"
            ],
            "image": "https:\/\/www.omavel.in\/pictures\/goto.jpg",
            "_date_published_rfc2822": "Fri, 17 Jul 2020 22:05:58 +0400",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "7",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/www.omavel.in\/pictures\/goto.jpg"
                ]
            }
        }
    ],
    "_e2_version": 4116,
    "_e2_ua_string": "Aegea 11.2 (v4116)"
}