ターミナル操作をしていてシステム情報を知りたいと思うことがよくあります。時々しか使わないコマンドだと、その度に使い方や出力を調べたりするのではないでしょうか。各コマンドはそれぞれ使い方が違うので、組み合わせて使うのも面倒です。 そこで使ってみたいのがosqueryです。システム情報を調べるのにSQLを使えるようになります。

osqueryの使い方

ユーザの一覧を出します。

osquery> SELECT uid, username FROM users;
+------------+------------------------+
| uid        | username               |
+------------+------------------------+
| 83         | _amavisd               |
| 263        | _analyticsd            |
| 55         | _appleevents           |
| 260        | _applepay              |
| 87         | _appowner              |
| 79         | _appserver             |
| 33         | _appstore              |

クエリなので、ジョインも使えます。ポートを調べています。

osquery> SELECT DISTINCT processes.name, listening_ports.port, processes.pid
    ...>   FROM listening_ports JOIN processes USING (pid)
    ...>   WHERE listening_ports.address = '0.0.0.0';
+----------------------+-------+-----+
| name                 | port  | pid |
+----------------------+-------+-----+
| loginwindow          | 0     | 121 |
| assistantd           | 0     | 435 |
| Dropbox              | 17500 | 471 |
+----------------------+-------+-----+

MACアドレスと、そのカウントを取っています。サブクエリを使えます。

osquery> SELECT address, mac, mac_count
    ...>   FROM
    ...>     (SELECT address, mac, COUNT(mac) AS mac_count FROM arp_cache GROUP BY mac)
    ...>   WHERE mac_count > 1;
+-----------------+-------------------+-----------+
| address         | mac               | mac_count |
+-----------------+-------------------+-----------+
| 255.255.255.255 | ff:ff:ff:ff:ff:ff | 2         |
+-----------------+-------------------+-----------+

osqueryが面白いのは、その構造をドキュメントにしておくことで、osqueryを通して自由に情報を取得できるようになることでしょう。SQLであれば大抵の開発者が知っていますので、情報の取り出しがとても簡単になるはずです。サーバにインストールしておくと色々捗りそうです。

osqueryはC++製のオープンソース・ソフトウェア(ライセンスはGPLとApache License 2.0のデュアルライセンス)です。

osquery/osquery: SQL powered operating system instrumentation, monitoring, and analytics.