WMI چیست ؟

WMI مخفف کلمات Windows Management Instrumentation است که در ترجمه فارسی به معنی ابزار مدیریتی ویندوز می باشد. WMI در واقع هسته اصلی تکنولوژی مدیریتی سیستم عامل ویندوز است ، شما توسط WMI می توانید سیستم Local خودتان یا سیستم های Remote در شبکه را مدیریت کنید.

البته این همه کاری نیست که WMI انجام می دهد. شما می توانید اطلاعاتی از وضعیت داخلی سیستم خود بدست بیاورید ، برای مثال شما می توانید WMI را با داشبورد ماشین مقایسه کنید ، همانطور که در داشبورد شما اطلاعات مربوط به وضعیت موتور ، باتری ، روغن و سوخت و ... را مشاهده می کنید در سیستم های کامپیوتری که از سرویس WMI استفاده می کنند شما وضعیت همه چیز از قبیل ، نرم افزارها ، Process ها ، Disk ها ، حتی User ها و Group ها و بسیاری از چیزهای دیگر را می توانید مشاهده کنید.قابلیت های WMI را بصورت کلی می توان Event گرفتن ، Query گرفتن و مسائلی از این قبیل عنوان کرد تا یک فرد به عنوان مدیر سیستم بتواند وضعیت سلامت سیستم را بررسی کند و در واقع بیشتری استفاده از WMI در بحث مانیتورینگ می باشد.
( توسینسو )

پس ما میتونیم با استفاده از WMI به اطلاعات جامعی از منابع سیستم دسترسی پیدا کنیم و بعدش هرکار که میخوایم با اونا بکنیم. ساده ترینش هم تبدیل دیتا به خروجی مناسب برای Prometheus و نمایش دادنش توی Grafana است.

پیش نیاز ها

  • Prometheus
  • Grafana
  • WMI Exporter

تو این پست نصب و تنظیم Prometheus + Grafana رو آموزش نمیدم چون از بحث دور میشیم. میتونید به منابع دیگه ای برای این کار مراجعه کنید.

خوشبختانه مثل خیلی از موارد دیگه برای این کار هم نمونه های از قبل انجام شده هست. برای استفاده از WMI هم قبلا یک Exporter خیلی خوب نوشته شده که از آخرین نسخه به طور رسمی توسط Prometheus Community پشتیبانی شده و ریپازیتوری به اکانت این مجموعه منتقل شده:

لینک دانلود نسخه 0.13.0

نسخه مناسب سیستم عامل خودتون رو با فرمت MSI دانلود کنید.

نصب

با استفاده از این فایل MSI می تونید یک Service به سیستم عامل اضافه کنید تا همیشه در حال اجرا باشه. روش نصب اینطور فایل ها به صورت زیر هست. البته میشه مثل فایل های نصبی دیگه باهاش کار کرد ولی خب ما دنبال شخصی سازی بیشتر هستیم :

msiexec /i <path-to-msi-file>

اینجا ما با منابع مختلفی سر و کار داریم که در این پروژه برای همه اونا یک Collector تعریف شده. منابعی که در اختیار شما قرار داره به این صورته :

هر کدوم از این Collector ها رو میتونید در حین نصب فعال کنید. البته تعدادی از اون ها به صورت پیشفرض فعال شدن

هر Collector که نیاز داشتید رو در لیست ENABLED_COLLECTORS قرار بدید

msiexec /i windows_exporter-0.13.0-amd64.msi ENABLED_COLLECTORS="cpu,cs,dns,hyperv,logical_disk,memory,net,os,process,service,system,tcp,thermalzone"

با اجرای دستور بالا سرویس نصب میشه و به سیستم اضافه میشه. به طور پیشفرض سرویس در آدرس 0.0.0.0 و پورت 9182 اجرا میشه.

برای تست می تونید به این آدرس برید و از عملکرد درست Exporter مطمئن بشید :

http://localhost:9182/metrics

نمایش داده ها

اینجا است که مشکل های کوچیکی شروع میشه. تو نسخه های اخیر و طی سیاست های جامعه Prometheus یکسری چیز ها عوض شده. مثلا از نسخه 0.12 به بعد Namespace ها تغییر کرده که میتونید در #519 و #499 در موردش بخونید.

این تغییر بهبود هایی رو به همراه داشته ولی متاسفانه باعث شده Dashboard های قبلی کاملا غیر استفاده بشن چون کل پیشوند ها تغییر کرده و از wmi_ به windows_ تبدیل شدن.

داشبورد های خوبی برای WMI قبلا ساخته شده. برای مثال نمونه های زیر رو ببینید

Windows Host Metrics | Base

d1

3 wmi_exporter 0.7.0+ for Prometheus

d2

البته تمام این داشبورد ها برای نسخه های قبلی نوشته شده و هنوز آپدیت نشدن. پس با توجه به عوض شدن Prefix ها کار نمیکنن.

اگر تمایل به مشارکت دارید که دست به کار شده و داشبورد جدید درست کنید یا همین قبلی ها رو عوض کنید :))

در غیر اینصورت میتونیم در تنظیمات Prometheus حرکت کوچیکی بزنیم تا موقتا بشه از همین داشبورد ها استفاده کرد

تغییر نام Label ها

برای این کار Job مورد نظرتون رو اینطور تعریف کنید :

- job_name: "windows"
    scrape_interval: 10s
    scheme: http
    static_configs:
      - targets: ["localhost:9182"]
    metric_relabel_configs:
      - source_labels: ["__name__"]
        target_label: "__name__"
        regex: "windows_(.*)"
        replacement: "wmi_$1"

با این کار به طور خودکار Label ها تغییر نام میدن و با همون نام قبلی ذخیره / پردازش میشن و به راحتی با داشبورد های قبلی همخوانی دارن

من خودم از این Dashboard استفاده میکنم ولی با توجه به نیازتون از نمونه های دیگه هم میشه استفاده کرد یا حتی میتونید داشبورد خودتون رو درست کنید.

سورس کامل پروژه در این آدرس موجوده :

prometheus-community/windows_exporter
Prometheus exporter for Windows machines. Contribute to prometheus-community/windows_exporter development by creating an account on GitHub.

در نهایت اگر سوال یا مشکلی داشتید در تماس باشید.