Loki – это платформа для агрегирования журналов с открытым исходным кодом под лицензией Apache 2.0, разработанная Grafana Labs и созданная при огромной поддержке растущего сообщества. Это также проект, над которым я работаю каждый день. В этой статье, вместо того, чтобы просто говорить о том, как работает Loki, я дам практическое введение в решение реальных проблем с его помощью.
Мне нравится история моей оболочки, и я всегда был фанатичным пользователем CTRL + R.
Внезапно поиск команд пошел отсюда:
К этому:
Хотя fzf значительно улучшил качество моей жизни, в моей истории оболочки все еще отсутствовали некоторые детали:
Я думаю о своей истории оболочки как о документации: это важная история, которую я не хочу терять. Объединение Loki с моей историей оболочки помогает решить эти и другие проблемы.
Loki использует интуитивно понятную модель меток, которую проект Prometheus с открытым исходным кодом использует для показателей, и расширяет ее до мира агрегирования журналов. Это позволяет разработчикам и операторам легко переключаться между своими метриками и журналами, используя один и тот же набор ярлыков. Даже если вы не используете Prometheus, есть еще множество причин, по которым Loki может хорошо подходить для ваших нужд хранения журналов:
Таким образом, подход Loki состоит в том, чтобы вести небольшой индекс метаданных о ваших журналах (метках) и хранить неиндексированное и сжатое содержимое журнала в недорогих хранилищах объектов, чтобы упростить и удешевить работу. Приложение создано для работы как единый процесс и легко превращается в высокодоступную распределенную систему. Вы можете получить высокую производительность запросов при больших рабочих нагрузках журналирования за счет распараллеливания и сегментирования запросов – что-то вроде MapReduce для ваших журналов.
Кроме того, эта функция доступна для всех бесплатно. Как с графана открытой наблюдаемости платформы, графана Labs стремится сделать Локи полнофункциональный, полностью открыт журнал агрегации программного обеспечения каждый может использовать.
Я запускаю Loki на Raspberry Pi в своей домашней сети и храню свою историю оболочки за пределами сайта в корзине S3.
Когда я нажимаю CTRL + R, интерфейс командной строки Loki LogCLI делает несколько запросов на пакетную обработку, которые передаются в fzf. Вот пример – в верхней части показаны журналы сервера Loki на Pi.
Готовы попробовать? Следующее руководство поможет вам настроить и запустить Loki для интеграции с историей оболочки. Поскольку это руководство призвано упростить задачу, эта установка будет запускать Loki локально на вашем компьютере и сохранять все файлы в файловой системе.
Вы можете найти все это, а также информацию о том, как настроить более сложную установку, в репозитории loki-shell на GitHub .
Обратите внимание, что это руководство не изменит какое-либо существующее поведение в вашей истории, поэтому существующие команды истории оболочки и настройки истории останутся нетронутыми. Вместо этого это дублирует историю команд в Loki $PROMPT_COMMANDв Bash и precmdZsh. Что касается CTRL + R, он перегружает функцию, которую fzf использует для доступа к команде CTRL + R. Это безопасно, и если вы решите, что вам это не нравится, просто следуйте инструкциям по удалению в репозитории GitHub, чтобы удалить все следы. История вашей оболочки останется нетронутой.
$PROMPT_COMMAND
precmd
Есть несколько способов установить fzf, но я предпочитаю метод Git :
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install
Скажите да на все вопросы.
Если у вас уже установлен fzf, убедитесь, что у вас включены привязки клавиш (т.е. убедитесь, что при нажатии CTRL + R появляется сообщение fzf). Вы можете повторно запустить установку fzf, чтобы при необходимости включить привязку клавиш.
Как и fzf, loki-shell также имеет репозиторий Git и скрипт установки:
git clone --depth 1 https://github.com/slim-bean/loki-shell.git ~/.loki-shell ~/.loki-shell/install
Сначала сценарий создает ~/.loki-shellкаталог, в котором будут храниться все файлы (включая данные Loki). Затем он загрузит двоичные файлы для Promtail , LogCLI и Loki.
~/.loki-shell
Потом спросит:
Do you want to install Loki? ([y]/n)
Если у вас уже есть централизованный Loki, работающий для loki-shell, вы можете ответить n; однако для этого руководства ответьте yили нажмите Enter.
n
y
Есть два варианта локального запуска Loki: как образ Docker или как отдельный двоичный файл (с поддержкой добавления службы systemd). Я рекомендую использовать Docker, если он доступен, так как я думаю, что он немного упрощает операции, но оба работают нормально.
Чтобы запустить Loki как образ Docker:
[y] to run Loki in Docker, [n] to run Loki as a binary ([y]/n) y Error: No such object: loki-shell Error response from daemon: No such container: loki-shell Error: No such container: loki-shell 54843ff3392f198f5cac51a6a5071036f67842bbc23452de8c3efa392c0c2e1e
Если вы запускаете установку впервые, не обращайте внимания на сообщения об ошибках. Этот сценарий остановит и заменит работающий контейнер Loki, если версия не совпадает, что позволяет повторно запустить этот сценарий для обновления Loki.
Это оно! Loki теперь работает как контейнер Docker.
Данные от Loki будут храниться в формате ~/.loki-shell/data.
~/.loki-shell/data
Образ запускается с --restart=unless-stopped, поэтому он перезапустится при перезагрузке, но останется остановленным, если вы запустите docker stop loki-shell.
--restart=unless-stopped
docker stop loki-shell
(Если вы используете Docker, вы можете перейти к интеграции с оболочкой .)
Есть много способов запустить двоичный файл в системе Linux. Этот сценарий может установить службу systemd. Если у вас нет systemd, вы все равно можете использовать двоичную установку:
[y] to run Loki in Docker, [n] to run Loki as a binary ([y]/n) n Run Loki with systemd? ([y]/n) n This is as far as this script can take you You will need to setup an auto-start for Loki It can be run with this command: /home/username/.loki-shell/bin/loki -config.file=/home/username/.loki-shell/config/loki-binary-config.yaml
Сценарий выдаст команду, которую необходимо использовать для запуска Loki, и вы сможете самостоятельно настроить сценарий инициализации или другой метод его автоматического запуска.
Вы можете запустить команду напрямую, если хотите, и запустить Loki из текущей оболочки.
Если же у Systemd, у вас есть возможность позволить сценарий установки Systemd службы или показывая вам команды для запуска его самостоятельно:
Run Loki with systemd? ([y]/n) y Installing the systemd service requires root permissions. [y] to run these commands with sudo [n] to print out the commands and you can run them yourself. ([y]/n) n sudo cp /home/ed/.loki-shell/config/loki-shell.service /etc/systemd/system/loki-shell.service sudo systemctl daemon-reload sudo systemctl enable loki-shell sudo systemctl start loki-shell Copy these commands and run them when the script finishes. (press enter to continue)
Независимо от того, как вы установили Loki, теперь вы должны увидеть подсказку:
Enter the URL for your Loki server or press enter for default (http://localhost:4100)
Если вы настроили централизованный Loki, вы должны ввести этот URL здесь. Однако в этой демонстрации просто используется значение по умолчанию, поэтому вы можете нажать Enter.
Появится много текста, объясняющего все записи, добавленные к вам ~.bashrcили ~.zshrc(или к обоим).
~.bashrc
~.zshrc
Это оно!
Finished. Restart your shell or reload config file. source ~/.bashrc # bash source ~/.zshrc # zsh
Начните использовать свою оболочку и используйте CTRL + R, чтобы увидеть свои команды.
Откройте несколько окон терминала, введите команду в одном и CTRL + R в другом, и вы сразу увидите, что ваши команды доступны.
Также обратите внимание, что когда вы переключаетесь между терминалами и вводите команды, они становятся доступными сразу с помощью CTRL + R, но на работу стрелки вверх между терминалами не влияет. (Это может быть неверно, если у вас установлен Oh My Zsh , поскольку он автоматически добавляет все команды в историю.)
Используйте CTRL + R несколько раз, чтобы переключаться между сортировкой по времени и по релевантности.
Обратите внимание, что эта конфигурация будет отображать только историю запросов текущих хостов, даже если вы отправляете данные оболочки с нескольких хостов в Loki. Я думаю, что по умолчанию это наиболее разумно. Вы можете многое изменить, если хотите, чтобы это поведение изменилось; см. репозиторий loki-shell, чтобы узнать больше.
Он также установил псевдоним под названием hist:
hist
alias hist="$HOME/.loki-shell/bin/logcli --addr=$LOKI_URL"
LogCLI можно использовать для запроса и поиска в вашей истории непосредственно в Loki, в том числе для поиска на других хостах. Ознакомьтесь с руководством по началу работы с LogCLI, чтобы узнать больше о запросах.
Язык запросов журнала Loki (LogQL) предоставляет метрические запросы, которые позволяют вам делать некоторые интересные вещи; например, я могу увидеть, сколько раз я kcвводил команду (мой псевдоним для kubectl) за последние 30 дней:
kc
Установите Grafana и поэкспериментируйте со своей историей оболочки:
docker run -d -p 3000:3000 --name=grafana grafana/grafana
Откройте веб-браузер http://localhost:3000и войдите в систему, используя имя пользователя и пароль admin / admin по умолчанию .
http://localhost:3000
Слева перейдите в раздел «Конфигурация» -> «Источники данных» , нажмите кнопку « Добавить источник данных» и выберите « Локи» .
Для URL-адреса вы должны иметь возможность использовать http://localhost:4100(однако на моем компьютере WSL2 мне пришлось использовать фактический IP-адрес компьютера).
http://localhost:4100
Щелкните Сохранить и проверить . Вы должны увидеть Источник данных подключен и метки найдены .
Щелкните значок « Обзор» слева, убедитесь, что выбран источник данных Loki , и попробуйте выполнить запрос:
{job="shell"}
Если у вас есть несколько хостов, отправляющих команды оболочки, вы можете ограничить результаты определенным хостом, используя hostnameметку:
hostname
{job="shell", hostname="myhost"}.
Вы также можете искать определенные команды с помощью выражений фильтра:
{job="shell"} |= "docker"
Или вы можете начать изучать мир метрик из журналов, чтобы узнать, как часто вы используете свою оболочку:
rate({job="shell"}[1m])
Хотите восстановить хронологию происшествия? Вы можете фильтровать по конкретной команде и видеть, когда она запускалась.
Чтобы узнать, что еще вы можете сделать, и узнать больше о языке запросов Loki, ознакомьтесь с руководством по LogQL .
Для получения дополнительных идей, устранения неполадок и обновлений следите за репозиторием GitHub .
Продолжая использовать данный сайт вы принимаете политику конфиденциальности и cookies