Osquery выставляет ОС как реляционную СУБД

    Facebook выложил на гитхабе фреймворк OSquery, он осуществляет низкоуровневый мониторинг процессов в OS X и Linux и хранит их в виде SQL-таблиц. Такой способ по-своему удобен, ведь в запросе можно объединять разные таблицы.

    Например, если мы хотим посмотреть названия, pid и порты всех процессов, которые прослушивают порты во всех интерфейсах, то составляем запросик

    SELECT DISTINCT 
      process.name, 
      listening.port, 
      process.pid
    FROM processes AS process
    JOIN listening_ports AS listening
    ON process.pid = listening.pid
    WHERE listening.address = '0.0.0.0';

    Или другой запрос, он выводит список всех демонов OS X, которые запускаются вместе с операционной системой и продолжают выполняться после этого. Возвращается название демона и путь к исполняемому файлу.

    SELECT 
      name, 
      program || program_arguments AS executable 
    FROM launchd 
    WHERE 
      (run_at_load = 'true' AND keep_alive = 'true') 
    AND 
      (program != '' OR program_arguments != '');

    Подобными запросами отслеживаются работающие процессы, загруженные модули ядра и сетевые соединения.

    Новые SQL-таблицы для OSquery довольно просто сделать самому. По желанию пополните общий каталог таблиц.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 18

      0
      Когда-то мне схожие мысли в голову приходили. Но до ума я ли не довел.
      А сейчас уже задумываюсь о SPARQL в этой роли :-).
        +8
        Что-то очень WMI напоминает…
          +7
          Похоже на PowerShell и WMI

          Толь на Windows это появилось много много лет назад...
            0
            Внезапно.

            $> brew info osquery
            osquery: stable 1.0.3 (bottled)
            osquery.io
            Not installed
            From: github.com/Homebrew/homebrew/blob/master/Library/Formula/osquery.rb
            ==> Dependencies
            Build: cmake ✘
            Required: boost ✘, gflags ✘, glog ✘, openssl ✔, rocksdb ✘, thrift ✘
              0
              Есть куда более удобные языки запросов к нетабличным данным.
                +1
                Уж не томите, дайте примеров, чтобы было куда копать.
                  0
                    +1
                    Я бы назвал таким SPARQL. Но SQL тоже не так уж плох.
                  +1
                  Вот если бы ещё можно было INSERTами процессы запускать, а DELETEами останавливать — было бы вообще интересно.
                    +1
                    Через UPDATE приоритет менять.
                      +1
                      Сделают рано или поздно, я уверен, явно же они не просто так эту движуху затеяли
                    +1
                    Этот проект построен на базе SQLite, что конечно даёт плюсы к переносимости, однако вводит свои ограничения, всё-таки SQLite не имеет много возможностей от больших баз данных. Есть альтернативная реализация (как я понял, пока proof-of-concept) на базе Postgres, причём пишут, что её было написать очень просто в виду наличия соответствующего API. Вот бы ещё можно было использовать все функции и фичи postgres, но не запуская его службу на всех нужных машинах…
                      0
                      В постгресе есть механизм Foreign Data Wrappers, позволяющий делать запросы к произвольным внешним данным. По-моему он здесь идеально подходит.
                      0
                      «Хозяин, нужно больше вьюх и абстракций» :)
                      0
                      Какая прелесть! Я о таком мечтал еще лет 10 назад, когда поддерживал простенький хостинг. Очень хотелось не копаться по куче разноформатных конфигов и команд, а все делать через SQL. Если бы все представлялось в виде SQL таблиц, то можно было бы строить не напрягаясь сложные запросы, типа «дай мне контактные данные всех учетных записей, у которых есть домены, срок регистрации которых заканчивается через 10 дней, и при этом на аккаунте есть деньги». Изменение данных тоже можно было бы делать через insert, update, delete, а не вызывать в терминале разные не однотипные команды. «Системные» таблицы можно было бы использовать совместно с собственными обычными таблицами в одних запросах.
                        0
                        Видел решение, где хранимые процедуры Postgres обновляли конфигурационные файлы и перезапускали демоны. Но информация хранилась в базе.
                        0
                        в MySQL есть INFORMATION_SCHEMA плагины, которые позволяют такое делать уже лет семь как.
                        Простой пример — www.markleith.co.uk/2007/04/29/monitoring-os-statsistics-with-information_schema-plugins/. Сложные что-то не нагугливаются, давно это было.

                        В MariaDB, кроме этого, есть CONNECT storage engine, там WMI просто экспортируется как таблица. Типа
                        create table CSPROD engine=CONNECT table_type='WMI';
                        

                        Only users with full accounts can post comments. Log in, please.