Macがおせぇ？証拠を見せろッ！！！！

# まえがき
 
この記事は下記の記事の応用編であり、後述のツイート（Post
？）へのアンサーソングです。


https://qiita.com/gzock/items/14dc4098370dfbc16c8e


https://x.com/gzock/status/1758480211916771580?s=20

優秀な先人であるGzockさんのアウトプットにおんぶにだっこでMac PCのパフォーマンス測定を連続的かつ定量的に行う方法を考えてみたので紹介します。
JamfやDatadogの設定は上述の記事がとても参考になるのでこの記事ではあまり深くは取り扱いません。

# そもそもの話
- 株式会社ビットキーで情報システム部やってます
- システム導入（とその予算取得）を得意としており、実技（実装）は色々勉強中です
    - 下記の記事で2024年の抱負を色々と謳っておきながら、この3ヶ月は記事内で全く言及していなかったシステム導入を４個程やっていました。
    


https://qiita.com/h_r_w_t_r/items/c8be86ee5173b07b5ac7

- アドカレが一段落したためアウトプットするタイミングを失っていたら上述のツイート（Post）に~~煽られた~~触発されたので頑張って書きます


# なにをやったの？
**Jamf Pro×Datadog**の組み合わせで、MacのメモリとCPUの使用状況を観測できるようにしました。スクリーンショットはこちら

![CleanShot 2024-04-05 at 16.20.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/aecf31b2-eade-60f1-bccc-be1969c8e8b4.png)


Macの**メモリ使用率**、**CPU使用率**を **シリアル単位**で約15分間隔でデータ取得して可視化してみました。

![CleanShot 2024-02-19 at 11.48.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/545278/4045a58b-6521-23e5-b3bb-f97966ba7c3c.png)

**tagによる絞り込みで、特定の1台に絞って時系列で確認する** ことも可能です。


# 何に使うの？
### 「PCが重たい/遅い」という定性情報を、定量化して可視化する
情シスをやっていると、メンバーから「PCが重い！」というIT備品投資に対するアツいFBを頂くことはわりとよくあるかと思います。
「では最新のPCを購買しましょう！」と言える素敵な情シスを目指したいところですが、当然社会はそこまで簡単ではありません。

そもそも「どれぐらいのスペックのPCを支給するべきか」という命題は非常に多くの変数を有しており、因数分解するのもなかなか大変です。

### 今渡しているPCは十分なスペックなのか？不足があるとしたらなに？を判断する

なので、実際にみんなが使っているPCがどれぐらい悲鳴を上げているのかをちゃんと定量的に測定し、支給しているスペックの何が不足しているのか、何をアップグレードすることでみんなが幸せになるのか、の材料集めの手段を考えてみました。

### 人単位・組織単位で必要なスペックの仮説が立てられる
PC単位で情報を出せているので利用者がわかる。つまり組織図情報とぶつけることで **「開発者に求められるスペック」「営業組織に求められるスペック」といった形で組織最適化したスペックが見積もれるようになります。**


### その他

ちなみに、特定のチーム内メンバーで1人だけ明らかに使用率（％）が高止まりしている人がいて、よくよく見ていくと何かのミスで標準貸与品よりもスペックが低いPCを割り当てられていることがわかりました。**情シスのオペレーションのエラー検知にも活用できそうです**



# どうやったの？
**MacのtopコマンドをゴニョゴニョしてDatadogのメトリクスに対してPostするスクリプトをJamf ProからPolicyとして配布しています。**

配布したスクリプトはこんな感じ（大部分は前述のNWの記事の内容を借用したため割愛）
```
# mac メトリクス生成 
readonly _MAC_VER=$(sw_vers -productVersion)
readonly _MAC_CPU_ARCHITECTURE=$(uname -m)
readonly _MAC_SERIALNUMBER=$(system_profiler SPHardwareDataType | grep 'Serial Number' | sed -e "s/      Serial Number (system): //g")

_RESULT_MAC_CPU=$(top -l 1 | grep -E "^CPU")
readonly _MAC_CPU_USAGE_USER=$(echo "${_RESULT_MAC_CPU}" | cut -d " " -f 3 | sed -e "s/%//g") 
readonly _MAC_CPU_USAGE_SYS=$(echo "${_RESULT_MAC_CPU}" | cut -d " " -f 5 | sed -e "s/%//g") 
readonly _MAC_CPU_USAGE_IDLE=$(echo "${_RESULT_MAC_CPU}" | cut -d " " -f 7 | sed -e "s/%//g") 
readonly _MAC_MEMORY_USAGE=$(memory_pressure -Q | awk 'NR==2{printf "%.2f%%\n", 100 - $NF}' | sed -e "s/%//g")  
readonly _MAC_MEMORY_NO_USAGE=$(memory_pressure -Q | awk 'NR==2{printf "%.2f%%\n", $NF}' | sed -e "s/%//g")
```

Jamf側の設定に関してもこちらの記事をそのまま真似するだけでできちゃったので割愛


https://qiita.com/gzock/items/14dc4098370dfbc16c8e

# Jamf Pro × Datadogじゃないとダメ？
- データをストアする場所やダッシュボードを作るだけなら別になんでもいいと思う。
    - GAS×スプレッドシートやBigQueryでも同じことはできそう
- Jamf Proは任意のスクリプトをばらまくという手段においてはとても便利
    - ホントはJamf上でこういったメトリクスが見れたら嬉しいがちょっとやりかたがわからなかった。


# あとがき
~~まだ「やってみた」ばっかりなので具体的なアクションには繋げられてないですが、「PCが遅い気がする」という声に対して定量的なアプローチができそう。同じスペック、同じ利用状況の人たちの差分を取ることで「まだ不満は訴えてないけど実は遅いと感じている」ような潜在層にも効果的なアクションが取れる予感がします。~~

２月に記事書いて下書きに入れたまま忘れていました。
あれから1ヶ月版結果、まだに購買するPCの選定や優先度の判断でちゃんと活用できています！

「PCが重い」という定性情報だけで判断を下すのではなく、限られた手札の中で如何に定量的な情報を集める策を弄することができるか、がCorporate Engineeringの腕の見せ所なんだろうなぁと感じます。