Ранее мы писали, как можно загрузить логи в Splunk из каталога или с помощью syslog, рассказывали как забирать стандартные виндовые и линуксовые события, но что если нам необходимо получать более гранулярную информацию о работе наших систем?
В таком случае на помощь приходят скрипты!
Когда, какие и как можно использовать скрипты в Splunk для получения данных — вы можете узнать под катом.
Типичные варианты использования
Скрипты зачастую используют в тех случаях, когда:
- Необходим доступ к информации, которая не пишется в лог;
- Нам нужны данные генерируемые посредством командной строки, например, с помощью vmstat или iostat;
- Нам необходимы специфические данные или результаты работы баз данных, веб сервисов или API;
- Данные нуждаются в предварительной обработке для более простого парсинга на события и поля;
- Используются источники данных с медленными и ресурсоемкими процедурами запуска;
- И др.
Для скрипта можно устанавливать интервал, с которым он будет воспроизводиться и передавать данные в Splunk.
В качестве сценариев можно использовать shell scripts, python scripts, командные файлы Windows, PowerShell или любые другие утилиты, которые могут формировать и передавать данные.
Пример
В рамках статьи мы рассмотрим пример загрузки данных с помощью скрипта.
Допустим, у нас есть файловый сервер и каталог, размер которого нам по некоторым причинам необходимо мониторить, а так же мы хотим чтобы он не превышал порогового значения (для теста в 45 мб). Давайте напишем скрипт, который будет считать размер этой директории c интервалом 30 секунд, а также сделаем алерт, который будет уведомлять нас о превышении порогового значения.
Размер папки будем считывать с помощью нижеприведенного скрипта, который на выходе даст временную метку, путь к папке и ее размер байтах.
import os
import time
from datetime import datetime
dir_path="///for_script"
def get_size(start_path = '.'):
total_size = 0
for dirpath, dirnames, filenames in os.walk(start_path):
for f in filenames:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp)
return total_size
time_of_event=datetime.strftime(datetime.now(), "%Y.%m.%d %H:%M:%S")
print time_of_event, dir_path, get_size(dir_path)
Подробнее загрузку данных с удаленных источников мы разбирали в предыдущих статьях (тут и тут). Поэтому обсудим сейчас это кратко.
Нам необходимы:
• Удаленная машина, на которой установлен Splunk Universal Forwarder
• Splunk-indexer, на котором мы создаем приложение send-to-indexer, переносим его в deployment-apps и настраиваем Forwarder management.
Также на Splunk indexer cоздаем приложение monitor_scripts, переносим его в папку deployment-apps. В приложении создаем папку local и в ней файл inputs.conf со следующим содержимым:
[script://./bin/scripts/foldersize.py]
disabled = false
index = test_script
interval = 30.0
sourcetype = test_script
Также добавляем туда наш скрипт в директорию /bin
Перезагружаем Deployment server
.../splunk/bin/splunk reload deploy-server
И… получаем данные!
Обработка данных и создание алерта
Splunk автоматически выбрал временную метку, но остальная информация осталась в виде сырых данных, поэтому необходимо выделить поля (О том как это сделать, мы писали в предыдущей статье) В данном случае мы выделили 2 поля: путь папки (folder_path) и размер (size)
Размер папки представлен в байтах, давайте переведем это число в Мб. (Это можно сделать и в скрипте, но мы покажем как сделать это в Splunk)
Создаем новое вычисляемое поле (Settings – Fields – Calculated fields – New)
Указываем source type наших данных, название нового поля и выражение для вычисления. Теперь к данным с указанным source type будет добавляться это вычисляемое поле.
Мы получили все интересующие нас поля, давайте создадим график, на котором будет показана динамика изменения размера папки и достигает ли она порогового значения.
Создаем алерт. Пусть, когда размер папки превысит 45 мб, Splunk отправит нам сообщение на электронную почту. Более подробно о том, как отправлять оповещение на электронную почту мы писали тут, а в Slack – тут.
Алерт будет основан на новом запросе, чтобы в сообщения можно было вставить поля из запроса.
Сохраняем запрос как алерт и прописываем его условия:
И получаем письмо:
В настройках алерта мы установили, что если размер папки не уменьшится в течение 15 минут, то оповещение придет вновь.
Заключение
На этом простом примере, мы показали принцип загрузки данных в Splunk через скрипты. Вы можете создать скрипт, который будет решать Вашу задачу: загружать необходимую информацию в Splunk и оперативно получать результат.
Надеемся, что эта информация будет полезна для Вас.
Мы рады ответить на все ваши вопросы и комментарии по данной теме. Также, если вас интересует что-то конкретно в этой области, или в области анализа машинных данных в целом — мы готовы доработать существующие решения для вас, под вашу конкретную задачу. Для этого можете написать об этом в комментариях или просто отправить нам запрос через форму на нашем сайте.
Мы являемся официальным Premier Партнером Splunk.
Автор: JuliaKoroleva