Архив автора: admin

Как разместить кэш браузера Brave в оперативной памяти

Кэш вашего веб-браузера хранит изображения, HTML и JavaScript с сайтов, которые вы посещаете, в локальном кеше. Это позволяет гораздо быстрее загружать страницы и меньше использовать пропускную способность. По сути, как только ресурс сохраняется в кэше, он повторно считывается локально, если не было удаленных изменений.

 

Что такое TMPFS

Tmpfs — это временная файловая система, созданная из доступной оперативной памяти системы. Tmpfs можно смонтировать в любом месте системы, чтобы обеспечить быстрое непостоянное хранилище. Arch Linux использует tmpfs по умолчанию в «/tmp», «/var/lock» и «/var/run». Все, что записывается в tmpfs, никогда не попадает на диск и сбрасывается при выключении системы.

 

Попробуйте использовать Храбрый

Brave — это новый браузер с открытым исходным кодом, основанный на хроме. Он ориентирован на защиту от отслеживания и конфиденциальность. Он может подключаться к Tor без дополнительной настройки. Он доступен на всех платформах и, будучи основанным на хроме, поддерживает популярные расширения хрома.

 

Ускорение загрузки страниц

Мы настроили нашу систему Arch для использования tmpfs для кеша Brave, ускорив загрузку локально хранимых веб-ресурсов и уменьшив износ нашего твердотельного накопителя. Информация, которая должна оставаться постоянной, периодически автоматически синхронизируется с локальным хранилищем.

Установите Brave из AUR. Браузеры большие и долго компилируются. К счастью, нам доступен бинарный пакет Brave:

$ yay -S brave-bin

 

Установите демон profile-sync с помощью следующей команды:

$ sudo pacman -S profile-sync-daemon

 

Установите поддержку демона синхронизации профиля для Brave из AUR, используя следующую команду:

$ yay -S profile-sync-daemon-brave

 

Выполните следующую команду, чтобы автоматически сгенерировать файл конфигурации в ~/.config/psd/psd.conf:

$ psd



----------------------------------



# $XDG_CONFIG_HOME/psd/psd.conf



#



# For documentation, refer man 1 psd or to the wiki page



# https://wiki.archlinux.org/index.php/Profile-sync-daemon



## NOTE the following:



## To protect data from corruption, in the event that you do make an edit while



## psd is active, any changes made will be applied the next time you start psd.



# Uncomment and set to "yes" to use overlayfs instead of a full copy to reduce



# the memory costs and to improve sync/unsync operations. Note that your kernel



# MUST have this module available in order to use this mode.



#



#USE_OVERLAYFS="no"



# Uncomment and set to "yes" to resync on suspend to reduce potential data loss.



# Note that your system MUST have gdbus from glib2 installed to use this mode.



#



#USE_SUSPSYNC="no"



# List any browsers in the array below to have managed by psd. Useful if you do



# not wish to have all possible browser profiles managed which is the default if



# this array is left commented.



#



# Possible values:



# chromium



# chromium-dev



# conkeror.mozdev.org



# epiphany



# falkon



# firefox



# firefox-trunk



# google-chrome



# google-chrome-beta



# google-chrome-unstable



# heftig-aurora



# icecat



# inox



# luakit



# midori



# opera



q# opera-beta



# opera-developer



# opera-legacy



# otter-browser



# qupzilla



# qutebrowser



# palemoon



# rekonq



# seamonkey



# surf



# vivaldi



# vivaldi-snapshot



#



#BROWSERS=()



-------------------------------------------

 

Измените файл конфигурации в соответствии с вашими потребностями. По умолчанию кеш tmpfs демона синхронизации профилей применяется ко всем поддерживаемым браузерам (включая Brave с добавленным пакетом, который мы установили).

Включите службу с помощью следующей команды:

$ systemctl --user enable psd

 

Самый простой способ убить все браузеры и запустить службу — выйти из системы и снова войти в нее.

 

Вывод

Теперь ваши временные данные кеша Brave будут храниться в оперативной памяти при следующем запуске. Он синхронизирует постоянную информацию с диском и перезагружает ее в случае перезагрузки или сбоя системы. Это быстро, эффективно и потребляет относительно немного ресурсов. Повышение производительности неоспоримо.



2022-10-03T20:02:15
ArchLinux

6 шагов, чтобы стать дизайнером видеоигр в 2022 году

Вы хотите узнать, как стать игровым архитектором ?

Пожалуйста, не воспринимайте дезокситимидинмонофосфат с иронией; вы действительно хотите создавать игры, и вы этого добьетесь, со временем.

Это руководство предназначено для того, чтобы помочь вам принимать обоснованные решения о вашем образовании и карьере на пути к тому, чтобы стать графическим дизайнером видеоигр.

Вы узнаете о :

  • Различия между игровым дизайном и разработкой игр
  • Карьерный путь
  • Ваше образование
  • Опыт работы
  • Процесс найма
  • Продвижение по службе и карьерный рост

 

Этот раздел можно прочитать от начала до конца, или же вы можете углубляться и углубляться в то, что кажется вам наиболее актуальным.

 

Разработка игр – это круто, но это конкурентоспособно

Дизайн видеоигр — это конкурентный бизнес, и чтобы получить должность младшего графического дизайнера, вам нужно будет поставить себя выше этого уровня.

Ознакомьтесь с разделами, посвященными опыту работы и образованию, чтобы узнать, как придать вашему эскизу преимущество, а затем прочитайте о действии по найму, чтобы точно узнать, чего вы можете ожидать на пути к решению вашей начальной проблемы.

Разработка игр может показаться сложным делом, и это может быть так, но с правильным подходом у вас не будет проблем затмить соперника.

поэтому давайте сразу приступим к делу!

Степени разработки игрового плана варьируются в зависимости от инициации, но во всех курсах по разработке игр есть грубые элементы :

как стать графическим дизайнером телевизионных игр? Выполните следующие шесть шагов :

  1. Познакомьтесь с игровым дизайном
  2. Получить образование (найти качественное обучение гейм-дизайну)
  3. Начните создавать свое портфолио игрового дизайна
  4. Получить стажировку по геймдизайну (или стать волонтером)
  5. Подать заявку на вакансию дизайнера игр
  6. Сокрушите процесс найма (показы и собеседования)

 

Дизайн видеоигр против разработки игр

Прежде всего, нам нужно поговорить о расхождении между игровым дизайном и разработкой игр. Эти два понятия часто используются как взаимозаменяемые, но это два разных карьерных пути. Дизайн игр часто включает в себя создание :

  • новые концепции игр
  • механика
  • сюжетные линии

 

Разработка игр, как правило, относится к созданию игр, начиная с анимации и заканчивая программой locomotive. Это момент, подобный разнице между водителем автомобиля и инженером, который строит автомобиль.

 

Дизайнеры и разработчики нуждаются друг в друге

Друг без друга задачи бесполезны ( какой смысл в том, чтобы уметь водить, если никто не делает автомобили ), поэтому вам нужны оба, чтобы создать работающий автомобиль. В этом примере водителем будет кутюрье, а инженером — разработчик. Случайная работа водителя/дизайнера бессмысленна, если некому спроектировать автомобиль или разработать игру. И нет смысла разработчику/инженеру создавать что-то, что никто не собирается использовать.

Вы всегда должны заботиться о том, чтобы и то, и другое имело одинаковое значение в общем процессе создания игр. Однако, несмотря на то, что эти две роли представляют собой разные карьерные пути, они постоянно дополняют друг друга.

Дизайнер интерьера дает замечания и указания разработчику, а разработчик сообщает второму о своих улучшениях в игре.

Они оба нуждаются друг в друге, чтобы разработать наилучшую возможную игру. И по этой причине очень хорошо иметь четкое представление о другом пути карьерного роста, отличном от того, который вы выбираете.

 

Подходит ли вам карьера в видеоиграх?

Пути в игровую индустрию

Таким образом, вы можете видеть, что эти два вопроса расходятся во мнениях, но на самом деле это два разных пути к усердию в играх.

То, что вы решите сделать центром своей карьеры, будет зависеть от ваших талантов и интересов, но вам все равно нужна веская причина того, что делает другой путь карьеры, чтобы быть лучшим, кем вы можете быть.

Разговор об игровом дизайне

Одна из самых важных вещей, которые может сделать начинающий игровой кутюрье, — это поговорить о дизайне.

Вы уже убедительно говорите о плохом дизайне дистрибутива, если вы фанат видеоигр, но гораздо сложнее говорить о товарном изобретении, потому что иногда цель настолько хороша, что вы ее не замечаете.

Этот раздел посвящен тому, как научиться говорить о дизайне проницательно и полезно, и это станет важным навыком – как для интервью, так и для объяснения ваших идей вашей команде дизайнеров и разработчиков.

Разговор о плохом дизайне

Как мы уже говорили, говорить о плохом плане легко; мы все это делаем постоянно подумайте об игре, которая вам не нравится. Давай, сделай это, теперь, когда вы хотите стать архитектором, недостаточно просто подумать: “ Мне не нравится эта игра ”, вам нужно подумать о том, почему вам не нравится трийодтиронин.

Начнем с того, что это может быть просто детской причиной, например, “ персонаж X тренируется ”.

Но почему они скучные ?

Продолжайте задавать вопросы, пока вам больше не понадобится тироксин, и вы доберетесь до корня проблемы, теперь, когда вы определили, что вы сделали неправильно, важно определить, как это можно исправить.

Исправление плохого дизайна видеоигр

Исправление плохого игрового дизайна — это то же самое, что и выявление плохого дизайна, но обратно.

Подумайте о том, как вы решаете основную проблему, связанную с игрой, возможно, вам не нравилось удерживать X для запуска, действительно, вы, витамин d, хотите это исправить, но как это повлияет на следующий уровень?

Продолжайте работать по цепочке, сглаживая перегибы, пока не решите, что вы «исправили» игру в более приемлемый государственный департамент. затем, отметив, что вы изменили и почему, определите, что еще нужно вернуть, иногда речь идет скорее о незначительных изменениях, чем о больших, и экспериментирует как с небольшими изменениями, так и с опечатками, меняющими правила игры.

Разговор о хорошем дизайне

О полезном дизайне часто труднее говорить, потому что гораздо сложнее определить, почему вам что-то нравится, чем определить, что действует вам на нервы. Размышления о хорошем дизайне часто начинаются с впечатления; мне нравится эта игра, мне нравится этот персонаж, эта механика работает хорошо. Затем, как только вы начнете точно определять, что делает хорошую игру отличной, вы можете начать копать глубже. Возьмите механику за образец – если вы считаете, что конкретный автомеханик работает хорошо, почему он работает хорошо? Возможно, вы рисуете пробел, но легче снова подумать об изменении – что произойдет, если вы поменяете его на другого машиниста?

Это должно помочь вам определить, что делает игру хорошей.

Но почему они это сделали?

Независимо от того, считаете ли вы тот или иной вариант дизайна хорошим или плохим, полезно подумать о том, почему архитектор сделал этот выбор.

Это особенно важно при неудачном выборе дизайна – почему кутюрье не сделал лучшего выбора ? Возможно, это было ограничение, возможно, они думали, что это хороший ум, учитывая другие ограничения.

Это поможет вам рассказать о том, почему дизайнеры сделали такой выбор и что бы вы сделали по-другому, но, кроме того, это даст вам представление о том, на что это будет похоже, когда вы сами станете игровым архитектором.

 

Обзор карьеры

Мы бы солгали, если бы сказали, что в индустрии есть одно средство в качестве дизайнера сюжетных интерьеров, потому что есть много способов сделать это, я не смог бы сосчитать их все.

Есть более распространенные способы стать геймдизайнером и более неясные корни.

Например, стали кутюрье благодаря :

  1. Получение степени в области искусственного интеллекта (подумайте о роботах, пытающихся читать и понимать, это был мой диссертационный проект).,
  2. Обучение ведению бизнеса
  3. Открываю собственную студию

 

Другие люди выбирают более традиционный путь, изучая курсы, связанные с игровым дизайном, в колледже и проходя стажировку, прежде чем получить должность младшего дизайнера для большой сюжетной вечеринки.

Безусловно, наиболее распространенный путь включает :

  • Курсы и специализации, связанные с игровым дизайном, в колледже
  • Прохождение стажировок и опыт работы
  • Получение должности в крупной, хорошо зарекомендовавшей себя компании (прежде чем продолжить карьеру)

 

Карьера дизайнера игрового интерьера в прошлом младшего игрового архитектора включает :

  • Стать старшим дизайнером
  • Стать ведущим дизайнером проекта
  • Создание собственной консалтинговой компании (где вы помогаете другим компаниям, помогая им с элементами дизайна)
  • Или открыть собственную студию!

 

Если конечным результатом для вас является искалеченный дизайн, есть несколько способов попасть сюда.

Это руководство охватывает наиболее распространенный маршрут, но не забывайте подключаться к сети и пробовать другие пути, потому что вы никогда не знаете точно, что ждет за каждым углом.

 

Продолжение следует …



2022-10-03T18:39:10
Программирование

Генеральный директор Intel защищает огромные производственные расходы как абсолютно необходимые для будущей прибыли

В обширном интервью для прессы региона EMEA на прошлой неделе руководитель Intel Пэт Гелсингер ответил на вопросы по многочисленным темам, связанным с производством, продажами и технологиями. «Разжигание подлинной страсти» — вот последний вопрос. Нам интересно, как Intel планирует защититься от продолжающихся масштабных инвестиций в глобальное производство микросхем в период снижения продаж и мрачных перспектив.

 

Не судите меня по ежеквартальным отчетам

Особое упоминание и гнев были зарезервированы для Уолл-стрит, а Гелсингер прокомментировал реакцию рынка на краткосрочные финансовые результаты. «У вас уходит четыре года, чтобы построить фабрику. Могу ли я принять решение о финансовых перспективах этого квартала относительно того, собираюсь ли я делать четырехлетние инвестиции или нет? Нет!», — ругался босс, в его голосе слышалось разочарование. «[Уолл-стрит] у вас плохой квартал, Intel, можете ли вы продвинуть свои планы капиталовложений на вторую половину десятилетия? Это самый глупый вопрос!

«Вы должны принимать долгосрочные решения. Давайте поместим это в контекст на секунду. Вы не получите ни цента дохода за первые четыре года строительства фабрики при инвестициях в 20 миллиардов долларов. Фабрика не окупается даже в течение еще одного года или 18 месяцев после этого. Ни пенни прибыли до шестого года. Вы не можете принимать эти решения на основе квартальных циклов. Вы должны быть убеждены в своей стратегии и видении, когда смотрите на вторую половину десятилетия».

Подчеркивая масштабы инвестиций, необходимых для передовых фабрик, Гелсингер сослался на общую долю в 30 миллиардов долларов на одном предприятии, включая технологии и инструменты, до того, как предполагаемая прибыль начнет поступать на шестой год. Это чертовски рискованная игра, и Гелсингер не питает иллюзий относительно связанного с этим риска. «Это довольно безумно [имеется в виду 30 миллиардов долларов], как вести такой бизнес? Вам лучше провести его с учетом возможностей спроса во второй половине десятилетия».

И в этом заключается загвоздка. Уолл-Стрит хочет видеть большие цифры уже сейчас, хотя Intel знает, что ее производственное видение принесет плоды, а стратегия IDM 2.0 не окупится в ближайшие годы.

«Теперь ты знаешь мою дилемму. Я раз в квартал разговариваю с аналитиками с Уолл-стрит, которые никогда ничего не запускали, и спрашивают меня о результатах и ​​инвестиционных ставках, которые я делаю», — продолжил глава Intel. Расходящиеся взгляды, которые, если читать между строк, означают, что Гелсингера не слишком беспокоит текущая цена акций Intel в $25,77.

 

Здание для двойного ТАМ

Так почему же Intel делает большие ставки на будущее производства, если бизнес по изготовлению продукции стоит десятки миллиардов долларов и связан со значительным подразумеваемым риском?

Большинство аналитиков сходятся во мнении, что к концу десятилетия рынок полупроводников вырастет с нынешних 600 миллиардов долларов до более чем триллиона долларов . Долгосрочная производственная стратегия Gelsinger основана на концепции быстрорастущего TAM (общий доступный рынок) в течение следующих нескольких лет, ссылаясь на потребность в огромных, рассчитанных инвестициях сейчас, с должным знанием времени, необходимого для обеспечения полной работоспособности заводов и мощность процветает.

Генеральный директор Intel защищает огромные производственные расходы как абсолютно необходимые для будущей прибыли

 

«На планете есть ровно три компании, способные создавать передовые технологические процессы. Я один из них, и я единственный западный», — высказал мнение Гелсингер, не называя TSMC и Samsung в качестве двух других главных героев.

Именно здесь Гелсингер делает ставку на пресловутую ферму, что его стратегия ускорения развития производства путем установки пяти узлов за четыре года может окупиться. «Географическая устойчивость, сбалансированность и коридоры емкости гарантируют, что Intel завоюет множество клиентов-производителей», что еще больше усиливает достоинства стратегии IDM 2.0.

 

Если вы построите его, они придут

Не говоря уже о том, кого Intel нацелила на крупномасштабное литейное производство в ближайшем будущем, Гелсингер представила, кто есть кто в мире технологий. «Представьте, что вы Криштиану [Амон] в Qualcomm, Дженсен [Хуанг] в Nvidia, Тим [Кук] в Apple; У Intel самые лучшие транзисторы, доступная емкость, поэтому вы можете разработать лучший продукт вместе с Intel».

Г-н Гелсингер выразил уверенность в том, что Intel снова станет мощным производственным центром. «Ты хочешь создать лучший iPhone, Тим? Это становится очень просто, если у меня есть лучшая технология, поэтому очень важно, чтобы мы реализовали стратегию на этих пяти узлах за четыре года».

Понимаемые в этом контексте и связанные с Европой, ошеломляюще огромные инвестиции в Магдебург, Германия, продолжающаяся многомиллиардная экспансия в Ирландии и, по слухам, инвестиции в Вигасио, Италия, являются необходимыми частями этого десятилетнего видения стать лидером литейного производства. в бизнесе на триллион долларов. Легендарная карьера и наследие Гелсингера в Intel будут определяться тем, окупится ли его смелая стратегия.



2022-10-03T18:23:11
Бизнес

Fail2Ban | блокируем IP адреса сети TOR

Сегодня научимся блокировать IP адреса сети TOR с помощью утилиты Fail2Ban.В качестве подопытного Я буду использовать Ubuntu Server 20.04 LTS. Возникла ситуация заблокировать доступ TOR сети к моей внутренней сети и серверу. Для блокировки буду использовать утилиту Fail2Ban.

И так “поехали”. Читать

Установка, настройка и работа с Hashicorp Vault

В данной инструкции попробуем охватить как можно больше примеров работы с Hashicorp Vault. Мы выполним установку на системы Linux, настоим сервер, сохраним несколько секретов и попробуем получить доступ к данным секретам из различных систем. В качестве Linux рассмотрим Debian и CentOS 7 и 8.




Подготовка




Прежде чем начать, приведем наш сервер в готовность. Установим необходимые пакеты, настроим время и систему безопасности.




Установка пакетов




Нам понадобятся некоторые утилиты. Команды для их установки зависят от используемой системы.




а) Debian:




apt-get install wget chrony curl apt-transport-https




б) CentOS:




yum install wget chrony curl




* где:







Настройка времени




Для корректного получения токенов необходимо, чтобы время на сервере было правильное. Задаем необходимый нам часовой пояс:




timedatectl set-timezone Europe/Moscow




* полный перечень вариантов можно посмотреть командой timedatectl list-timezones.




Если у нас в сети есть свой сервер синхронизации времени, открываем на редактирование файл настройки chrony.




а) Debian:




vi /etc/chrony/chrony.conf




б) CentOS:




vi /etc/chrony.conf




Нам нужно поменять источник, с которым мы будем синхронизировать наше время. Данная опция отличается в зависимости от версии системы или дистрибутива.




а) в Debian или CentOS 8:




pool dmosk.local
#pool ...




* в нашем примере мы комментируем тот адрес pool, который был в конфигурации и подставляем адрес нашего сервера dmosk.local.




а) в CentOS 7:




server dmosk.local
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst




* в нашем примере мы комментируем адреса server, которые были в конфигурации и подставляем адрес нашего сервера dmosk.local.




Разрешаем автоматический запуск для сервиса синхронизации времени и перезапускаем его.




а) для Debian:




systemctl enable chrony




systemctl restart chrony




б) для CentOS:




systemctl enable chronyd




systemctl restart chronyd




Настройка брандмауэра




Для корректной работы сервиса нам необходимо открыть порт 8200. В зависимости от используемой утилиты управления netfilter мы должны применять разные инструменты.




а) Iptables (как правило, Debian):




iptables -I INPUT -p tcp --dport 8200 -j ACCEPT




Для сохранения правила можно воспользоваться утилитой iptables-persistent:




apt-get install iptables-persistent




netfilter-persistent save




б) Firewalld (как правило, для CentOS):




firewall-cmd --permanent --add-port=8200/tcp




firewall-cmd --reload




Установка и запуск




Программный продукт поддерживает различные варианты установки. Мы рассмотрим установку из репозитория.




Подключаем официальный репозиторий и устанавливаем пакет vault.




а) Debian:




curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -




echo "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" > /etc/apt/sources.list.d/hashicorp.list




apt-get update




apt-get install vault




б) CentOS:




wget https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo -O /etc/yum.repos.d/hashicorp.repo




yum install vault




Разрешаем автозапуск службы и если она не запущена, стартуем ее:




systemctl enable vault --now




Установка выполнена. При попытке зайти по адресу https://<IP-адрес сервера Vault>:8200/ мы должны увидеть страницу начальной настройки мастер-ключей.




Идем дальше.




Настройка рабочего окружения




При попытке выполнить любую операцию в командной строке, мы получим ошибку:




Error checking seal status: Get "https://127.0.0.1:8200/v1/sys/seal-status": x509: cannot validate certificate for 127.0.0.1 because it doesn't contain any IP SANs




Это значит, что мы пытаемся подключиться к нашему серверу по https с неправильным сертификатом. На этапе первичной настройки не хочется заниматься получением и настройкой валидного сертификата. В официальной документации сказано, что нужно ввести команду:




export VAULT_ADDR=http://127.0.0.1:8200




Она укажет текущему окружению подключаться к серверу по http. Однако, это приведет к другой ошибке:




Error checking seal status: Error making API request.

URL: GET http://127.0.0.1:8200/v1/sys/seal-status
Code: 400. Raw Message:

Client sent an HTTP request to an HTTPS server.




Она говорит, что мы подключаемся к серверу по незащищенному каналу, когда сервер требует безопасного соединения.




Для решения проблемы открываем файл:




vi /etc/vault.d/vault.hcl




И снимаем комментарии со следующих строк, а также меняем значение для поля address:




listener "tcp" {
  address = "127.0.0.1:8201"
  tls_disable = 1
}




* так как для https уже используется порт 8200, мы должны поменять предложенный по умолчанию вариант на свой, чтобы не возникало конфликтов при запуске сервиса.




Перезапускаем службу vault:




systemctl restart vault




Обновляем системную переменную VAULT_ADDR:




export VAULT_ADDR=http://127.0.0.1:8201




* обратите внимание, что мы поменяли порт подключения на 8201.




Пробуем вывести на экран статус:




vault status




Мы должны получить что-то на подобие:




Key                Value
---                -----
Seal Type          shamir
Initialized        false
Sealed             true
Total Shares       0
Threshold          0
Unseal Progress    0/0
Unseal Nonce       n/a
Version            1.7.1
Storage Type       file
HA Enabled         false




Чтобы данная системная переменная создавалась каждый раз при входе пользователя в систему, открываем файл:




vi /etc/environment




И добавляем:




VAULT_ADDR=http://127.0.0.1:8201




Распечатывание




После установки, сервер Vault находится в запечатанном (sealed) состоянии. То есть, он не знает, как ему расшифровывать секреты, которые будут храниться в базе.




При попытке выполнить любую операцию с хранилищем секретов мы получим ошибку:




* Vault is sealed




Чтобы исправить ситуацию, нужно выполнить инициализацию сервера — мы получим ключи для распечатывания (Unseal Keys). После необходимо ввести эти ключи и можно будет авторизоваться в системе.




Инициализация, распечатывание и вход




Для начала, нам необходимо инициализировать наш сервер. Это выполняется командой:




vault operator init




Команда нам вернет 5 ключей. Любые 3 из них являются ключами для распечатывания сервера (Unseal Key). Также нам будет предоставлен токен для root (Initial Root Token), с помощью которого можно будет войти в систему vault.




И так, распечатаем наш сервер, введя по очереди 3 команды.




Для первого ключа:




vault operator unseal




Для второго: 




vault operator unseal




И третьего: 




vault operator unseal




После выполнения каждой команды система будет запрашивать ключ. Необходимо ввести любые 3 из сгенерированных ранее. При правильном вводе ключа, мы будем видеть общую информацию по ключу. А при вводе третьего ключа мы должны увидеть:




Sealed          false




Это значит, что сервер больше не запечатан и с ним можно работать.




Теперь необходимо залогиниться в систему командой:




vault login




… и ввести ключ root, который мы получили после инициализации.




Мы можем выполнять команды для работы с Hashicorp Vault.




Автоматическое распечатывание




После перезагрузки нашего сервера он опять становится запечатанным. Предполагается, что полученных 5 ключей необходимо выдать пяти ответственным за безопасность сотрудникам. После перезагрузки, трое из них должны будут ввести свои данные. Это правильно с точки зрения безопасности.




Однако, если у нас есть причины автоматически поднимать сервер после перезагрузки, рассмотрим, как это сделать.




Данный способ противоречит безопасности, однако, реальная эксплуатация систем не всегда вписывается в рамки идеальных концепций.




Выполним настройку в несколько шагов.




1. Скрипт.




Создадим каталог для хранения скриптов:




mkdir /scripts




Создадим скрипт:




vi /scripts/unseal.sh




#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

sleep 10
vault operator unseal w1SgHSWyXm+7kwmYk4bFX2rBLG5jKxIn01DMkj57071D
vault operator unseal 38s4+FkxKTTANFZgCwEPFOgJIMwTvLca1j36yYPc3gdx
vault operator unseal 4xlpKVwPuNlskydM/qmCmW22x7WZdfuiFu92HGRNOa8o




* где w1SgHSWyXm+7kwmYk4bFX2rBLG5jKxIn01DMkj57071D38s4+FkxKTTANFZgCwEPFOgJIMwTvLca1j36yYPc3gdx и 4xlpKVwPuNlskydM/qmCmW22x7WZdfuiFu92HGRNOa8o — любых 3 токена (из 5 сгенерированных). Обратите внимание, мы задерживаем выполнение скрипта на 10 секунд — на практике, сервис vault может не успеть запуститься, и мы тогда получим ошибку при выполнении команды vault operator unseal.




Разрешаем запуск скрипта на выполнение:




chmod +x /scripts/unseal.sh




Можно, даже, выполнить скрипт:




/scripts/unseal.sh




В итоге, мы распечатаем наш сервер.




2. Автозапуск скрипта при старте системы:




Большинство современных серверных систем работает на основе systemd. Рассмотрим автозапуск с помощью последней.




Создаем юнит:




vi /etc/systemd/system/vault-unseal.service




[Unit]
Description=Vault Auto Unseal Service
After=network.target
After=vault.service

[Service]
Environment="VAULT_ADDR=http://127.0.0.1:8201"
ExecStart=/scripts/unseal.sh
Type=oneshot
RemainAfterExit=no

[Install]
WantedBy=multi-user.target




* в данном примере мы выполняем одну команду при запуске сервиса — запуск скрипта /scripts/unseal.sh. Перед этим мы создаем системную переменную VAULT_ADDR, чтобы при выполнении команд в скрипте система понимала, к какому серверу подключаться.




Перечитаем конфигурацию для systemd:




systemctl daemon-reload




Разрешаем автозапуск созданного сервиса:




systemctl enable vault-unseal




Пробуем перезагрузить сервер — vault должен оказаться распечатанным.




Работа с секретами




Наша система полностью готова, чтобы ей пользоваться.




Для начала дадим разрешение на хранение секретов по пути secret:




vault secrets enable -path=secret/ kv




Мы должны получить ответ:




Success! Enabled the kv secrets engine at: secret/




Теперь выполним простую операцию по созданию секрета. Введем команду, предложенную на официальном сайте разработчика:




vault kv put secret/hello foo=world




* команда kv взаимодействует с хранилищем Vault. В данном примере мы добавляем пару ключ-значение, соответственно foo-world.




Мы должны получить ответ:




Success! Data written to: secret/hello




Посмотреть содержимое можно командой:




vault kv get secret/hello




На что мы получим:




===== Data =====
Key        Value
---        -----
foo        world




Также можно внести за раз множество значений:




vault kv put secret/hello foo=world excited=yes




Посмотреть список созданных секретов можно командой:




vault kv list secret




Теперь удалим секрет командой:




vault kv delete secret/hello




Полный перечень команд можно увидеть так:




vault -help




После чего можно будет получить помощь по конкретной команде vault, например:




vault kv -help




Данной информации достаточно, чтобы познакомиться с продуктом. Пойдем дальше.




Версионность и метаданные




Hashicorp Vault поддерживает версионность данных, то есть, мы можем посмотреть определенную версию данных внутри секрета. Однако, по умолчанию, сервис устанавливается с kv версии 1, которая не поддерживает данной операции. При попытке выполнить любую команду, захватывающую версионность, мы получим ошибку:




Metadata not supported on KV Version 1




Для решения необходимо создание механизма kv с поддержкой версии 2. Это делается командой:




vault secrets enable -version=2 kv




Или для ранее созданного пути включаем ведение версионности командой:




vault kv enable-versioning secret/




Теперь занесем 2 раза данные:




vault kv put secret/hello foo=world




vault kv put secret/hello foo=world2




Посмотреть данные определенной версии можно командой:




vault kv get -version=1 secret/hello




В нашем примере мы увидим:




=== Data ===
Key    Value
---    -----
foo    world




* то есть значение, которое вводилось первой командой.




Посмотреть метаданные секрета можно командой:




vault kv metadata get secret/hello




Для удаления определенной версии секрета вводим:




vault kv destroy -versions=1 secret/hello




Динамические секреты




Мы можем настроить автоматическое создание временных пользователей в различных системах. Это удобно для автоматического назначения прав приложению. При этом, через некоторое время пароль уже не будет действовать, что повышает безопасность системы.




Рассмотрим пример настройки динамических секретов для базы данных MariaDB/MySQL.




Первым делом, создадим пользователя в СУБД с правами создавать других пользователей. Подключаемся к базе данных:




mysql -uroot -p




Создаем учетную запись, под которой будет подключаться vault к СУБД:




> CREATE USER 'vaultuser'@'localhost' IDENTIFIED BY 'vaultpass';




Дадим права созданной учетной записи создавать других пользователей и назначать им права:




> GRANT CREATE USER ON *.* TO 'vaultuser'@'localhost' WITH GRANT OPTION;




Выходим из оболочки SQL:




> exit;




Теперь разрешаем механизм секретов базы данных (database secrets engine):




vault secrets enable database




Мы должны увидеть:




Success! Enabled the database secrets engine at: database/




* также мы можем получить ошибку path is already in use at database/, если данный механизм уже разрешен в нашей системе.




Создадим настройку для подключения к нашей базе:




vault write database/config/test 
 plugin_name=mysql-database-plugin
 connection_url="{{username}}:{{password}}@tcp(127.0.0.1:3306)/"
 allowed_roles="test-role"
 username="vaultuser"
 password="vaultpass"




* предполагается, что:







Создадим роль, по сути, зададим команду для создания временной учетной записи:




vault write database/roles/test-role 
 db_name=test
 creation_statements="CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}'; GRANT SELECT ON *.* TO '{{name}}'@'%';"
 default_ttl="1h"
 max_ttl="24h"




* где:







И так, теперь давайте создадим пользователя и пароль:




vault read database/creds/test-role




* после ввода команды vault сгенерирует и создаст в базе нового пользователя и пароль.




Мы должны увидеть что-то на подобие:




Key                Value
---                -----
lease_id           database/creds/test-role/JpEmEh2MJV115Lr4S4Lx5UHW
lease_duration     1h
lease_renewable    true
password           7v9jC-XHXJjQ2sicLI42
username           v-test--gVPavnGVr




* Если мы увидим ошибку, на подобие Error 1470: String ‘v-root-test-role-KHWyA2IwdoaUth7c’ is too long for user name (should be no longer than 16) мы столкнулись с ограничением на стороне СУБД (нельзя создавать имя пользователя с длиной более 16 символов). Чтобы решить проблему мы должны пересоздать подключение database/config/test с новым плагином mysql-legacy-database-plugin.




Также для создания пользователя мы можем использовать API запрос:




curl --header "X-Vault-Token: s.e0YKJEOHlpfgQiWqZlzVuUbY" http://127.0.0.1:8201/v1/database/creds/test-role




* где X-Vault-Token — токен с доступом. Для теста можно использовать тот, что был получен для root после инициализации системы.




Теперь давайте проверим, что созданные учетные записи имеют нужный нам доступ. Для начала, под пользователем root можно проверить, что записи созданы:




> SELECT user, host FROM mysql.user;




Мы должны увидеть в списках нужную запись (в нашем примере, v-test—gVPavnGVr).




Теперь зайдем под учетной записью, которая была создана с помощью vault:




mysql -h192.168.0.15 -u'v-test--gVPavnGVr' -p'7v9jC-XHXJjQ2sicLI42'




* в моем случае из-за доступа %, подключение с localhost было запрещено. Поэтому я проверяю доступ с другого хоста в локальной сети, добавив опцию -h192.168.0.15 (где 192.168.0.15 — сервер с СУБД, доступ к которой предоставлялся через vault).




Мы должны подключиться к базе.




Отменить доступ можно командой:




vault lease revoke database/creds/test-role/JpEmEh2MJV115Lr4S4Lx5UHW




* где database/creds/test-role/JpEmEh2MJV115Lr4S4Lx5UHW — значение lease_id, которое нам вернула система при создании временной учетной записи.




Посмотреть список всех идентификатором можно командой:




vault list sys/leases/lookup/database/creds/test-role




* где test-role — имя созданной нами роли.




Продлить lease_duration или default_ttl (пароль) можно с помощью команды:




vault lease renew database/creds/test-role/JpEmEh2MJV115Lr4S4Lx5UHW




Аутентификация и политики




Hashicorp Vault позволяет управлять доступами с помощью политик и токенов авторизации. Рассмотрим процесс настройки.




Работа с токенами




Для начала научимся управлять токенами. Простая команда для создания нового:




vault token create




Система сгенерирует новый ключ и сделает вывод на экран. 




Также мы можем создать временный токен:




vault token create -period=1h




* на один час.




Посмотреть информацию о токене можно через его аксессор. Сначала получим список аксессоров:




vault list auth/token/accessors




После смотрим токен по аксессору:




vault token lookup -accessor uW9Ajr8VzFiCwHzHWn75qWVe




Войти в систему с помощью токена можно командой:




vault login




После вводим наш токен. Или одной командой:




vault login s.Db9j6Q4TvyFDr3j2aQmXttrX




Посмотреть информацию о токене, под которым мы зарегистрировались в системе, можно командой:




vault token lookup




А данной командой мы создаем пользователя и привязываем его к политике my-policy:




vault token create -policy=my-policy




Если политики нет в системе, то мы получим предупреждение:




WARNING! The following warnings were returned from Vault:

  * Policy "my-policy" does not exist




Нас это не должно заботить — на следующем шаге мы ее создадим.




При необходимости привязать токен к нескольким политикам, перечисляем из в опциях policy:




vault token create -policy=my-policy -policy=my-policy2




Работа с политиками




Выше мы создали токен и привязали его к политике my-policy. Создадим ее:




vault policy write my-policy - << EOF
path "secret/data/foo/*" {
  capabilities = ["read", "create", "update"]
}

path "secret/data/hello/*" {
  capabilities = ["read", "update"]
}

path "secret/data/*" {
  capabilities = ["read"]
}
EOF




* в данной политике мы разрешаем чтение всех секретов в secret. Для ранее созданного секрета secret/hello мы разрешим чтение и обновление записей, а для секрета secret/foo также мы разрешаем создавать записи. Обратите внимание, что на самом деле, данные хранятся в secret/data




Посмотреть список политик можно командой:




vault policy list




Посмотреть информацию о конкретной политике можно командой:




vault policy read my-policy




Проверка политики




И так, мы создали токен, привязали его к политике, создали саму политику. Проверим, что наши права работают.




Если нужно, можно создать еще токен и привязать его к нашей политике:




vault token create -policy=my-policy




Зарегистрируемся с нужным нам токеном (который привязан к  проверяемой политике):




vault login




Попробуем сначала создать секрет в ветке secret/foo и в нем указать пару ключ-значение:




vault kv put secret/foo/new foo=world




Команда должна выполниться успешно.




Теперь сделаем то же самое для secret/hello




vault kv put secret/hello/new foo=world




Мы должны получить ошибку




Error writing data to secret/data/hello/new: Error making API request.

URL: PUT http://127.0.0.1:8201/v1/secret/data/hello/new
Code: 403. Errors:

* 1 error occurred:
    * permission denied




Теперь логинимся под токеном с полными правами и добавим запись:




vault kv put secret/hello/new foo=world




И снова заходим под токеном с ограниченными правами. Пробуем обновить запись:




vault kv put secret/hello/new foo=world2




Команда должна выполниться успешно, так как мы разрешили политикой обновлять записи.




Аутентификация на основе пользователей




Также в Hashicorp Vault мы можем создать пользователя с паролем и привязать к нему политику. Администратор сможем входить в систему под учетной записью, а не с помощью токена.




Разрешаем метод auth по пути userpass:




vault auth enable userpass




Создаем пользователя:




vault write auth/userpass/users/dmosk password="test-pass" policies="my-profile"




* данной командой мы создали пользователя dmosk с паролем test-pass и привязали его к политике my-profile.




Войти в систему можно командой:




vault login -method=userpass username=dmosk




Вводим пароль и попадаем в систему под пользователем dmosk. Можно выполнить тесты, которые мы делали выше.




Одноразовые SSH пароли




Рассмотрим варианты хранения секретов для авторизации по SSH с использованием одноразовых паролей или One-Time SSH Password (OTP).




Настройка на сервере Vault




Разрешаем механизм ssh:




vault secrets enable ssh




Создаем роль для создания одноразового пароля:




vault write ssh/roles/otp_key_role 
 key_type=otp
 default_user=test
 cidr_list=10.0.2.0/24




* в данном примере:







На сервере, пока, все. Переходим к настройке клиента.




Настройка на клиенте




На клиенте необходимо выполнить настройку, которая позволит выполнять две задачи:




  1. Создавать одноразовые пароли на стороне Vault.
  2. Осуществлять проверку подлинности при подключении по SSH.




Данной задачей занимается vault-ssh-helper. Рассмотрим процесс его установки и настройки.




Нам понадобится пакет для распаковки zip-архивов. В зависимости от системы ставим его одной из команд ниже.




а) для Debian / Ubuntu:




apt-get install unzip




б) для CentOS / Red Hat / Fedora:




yum install unzip




Установка vault-ssh-helper выполняется простым копированием бинарника. Переходим на официальный сайт для загрузки и выбираем последнюю версию пакета. На следующей страницы копируем ссылку на нужный вариант архива, в зависимости от архитектуры нашего сервера:







С помощью скопированной ссылки загружаем архив:




wget https://releases.hashicorp.com/vault-ssh-helper/0.2.1/vault-ssh-helper_0.2.1_linux_amd64.zip




 Распаковываем его:




unzip vault-ssh-helper_*.zip -d /usr/bin




Создадим каталог для конфигурационных файлов vault-ssh-helper:




mkdir /etc/vault-ssh-helper




Создадим конфигурационный файл:




vi /etc/vault-ssh-helper/config.hcl




vault_addr = "https://192.168.0.20:8200"
ssh_mount_point = "ssh"
tls_skip_verify = true
allowed_roles = "*"




* где:




  • vault_addr — адрес нашего сервера секретов.
  • ssh_mount_point — путь на стороне Vault, по которому будут храниться секреты. Настраивается при включении механизма SSH.
  • tls_skip_verify — стоит ли пропускать проверку подлинности сертификата. Так как у нас еще не настроен валидный сертификат, устанавливаем значение в true.
  • allowed_roles — на стороне сервера можно создавать разным пользователей от разных ролей. В данной настройке мы можем определить, пользователям с какой ролью будет разрешен вход по SSH.




Открываем конфигурационный файл pamd для sshd:




vi /etc/pam.d/sshd




И в самый верх добавляем:




auth sufficient pam_exec.so quiet expose_authtok log=/tmp/vaultssh.log /usr/bin/vault-ssh-helper -config=/etc/vault-ssh-helper/config.hcl
auth optional pam_unix.so not_set_pass use_first_pass nodelay
...




* в данной конфигурации мы, по-прежнему, сможем авторизоваться под учетными записями, созданными на самом сервере. Если необходимо это отключить, разрешив вход только с OTP, комментируем @include common-auth и меняем sufficient на required.




Наконец, редактируем конфигурационный файл sshd. Открываем его:




vi /etc/ssh/sshd_config




Выставляем следующие значения для опций:




ChallengeResponseAuthentication yes
...
UsePAM yes




* где ChallengeResponseAuthentication разрешает авторизацию с применением интерактивного ввода пароля; UsePAM разрешает использование модуля pam.




Перезапустим сервис ssh:




systemctl restart sshd




Выполняем проверку нашей настройки командой:




vault-ssh-helper -verify-only -config /etc/vault-ssh-helper/config.hcl




Мы должны получить ответ:




2021/05/18 14:07:14 [INFO] using SSH mount point: ssh
2021/05/18 14:07:14 [INFO] using namespace: 
2021/05/18 14:07:14 [INFO] vault-ssh-helper verification successful!




Значит настройка на клиенте выполнена коррекнто.




Создаем учетную запись на клиенте, под которой будем входить в систему с одноразовым паролем:




useradd test -m




* в нашей политике будет создаваться пароль для учетной записи test.




Создаем одноразовый пароль




Вводим команду:




vault write ssh/creds/otp_key_role ip=192.168.0.25




* в данном примере мы создаем одноразовый пароль для компьютера с IP-адресом 192.168.0.25.




Мы должны получить, примерено, такой вывод:




Key                Value
---                -----
lease_id           ssh/creds/otp_key_role/5SYfW5VDZ3qGnaMtPhUEHbNr
lease_duration     768h
lease_renewable    false
ip                 192.168.0.25
key                83a57021-74b0-3ce3-8179-6fb92288c0ce
key_type           otp
port               22
username           test




* мы получили одноразовый пароль 83a57021-74b0-3ce3-8179-6fb92288c0ce.




Пробуем войти в систему:




ssh test@192.168.0.25




Вводим тот пароль, который нам выдала система (key). Войти мы сможем только один раз, после нужно будет уже генерировать новый пароль.




Настройка SSL




В инструкции выше мы настроили наше окружение для локального подключения по http. Данный метод временный, так как не позволит управлять системой с другого компьютера или придется жертвовать безопасностью. Рассмотрим процесс настройки запросов по защищенному протоколу https.




Первое, что нам нужно, это получить сертификат. Правильнее всего купить сертификат или запросить через Let’s Encrypt. После прописать в конфигурационном файле vault путь до данного сертификата. Но мы рассмотрим процесс получения самоподписанного сертификата, но при этом, который примет система. Для этого необходимо выполнить несколько условий:




  • Сертификат должен быть выдан для hostname, по которому мы будем отправлять запросы.
  • Для сертификата мы должны указать альтернативное имя subjectAltName.




И так, создаем каталог для хранения сертификатов:




mkdir /etc/ssl/vault




Проверяем версию openssl:




openssl version




Она должна быть 1.1.1 и выше. В противном случае, необходимо выполнить обновление OpenSSL. Как правило, данное действие требуется только на CentOS 7.




Генерируем сертификат:




openssl req -new -x509 -days 1461 -nodes -out /etc/ssl/vault/cert.pem -keyout /etc/ssl/vault/cert.key -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=vault.dmosk.local" -addext "subjectAltName = DNS:vault.dmosk.local"




* в данном примере мы сгенерируем необходимые ключи по пути /etc/ssl/vault; обязательно, нужно поменять значения vault.dmosk.local на имя сервера, который используется у вас.




Если команда вернет ошибку, проверяем, что у нас обновленная версия openssl, которая поддерживает ключ addext.




Теперь откроем конфигурационный файл hashicorp vault:




vi /etc/vault.d/vault.hcl




Приведем секцию HTTPS listener к виду:




# HTTPS listener
listener "tcp" {
  address       = "0.0.0.0:8200"
  tls_cert_file = "/etc/ssl/vault/cert.pem"
  tls_key_file  = "/etc/ssl/vault/cert.key"
}




* необходимо поменять пути до файлов tls_cert_file и tls_key_file.




Перезапускаем сервис:




После перезагрузки сервиса, он станет запечатанным и нам нужно будет снова ввести 3 части ключа (команды vault operator unseal).




systemctl restart vault




Меняем в окружении переменную VAULT_ADDR:




export VAULT_ADDR=https://vault.dmosk.local:8200




* мы указываем протокол https, обращения должны выполняться по доменному имени, для которого мы получили сертификат; также указываем порт 8200.




Выполняем команду:




vault status




Мы должны получить состояние системы. Значит запросы по https работают.




И последнее, снова открываем файл:




vi /etc/environment




И также меняем значение для переменной VAULT_ADDR:




VAULT_ADDR=https://vault.dmosk.local:8200




Запуск в виде контейнера Docker




В инструкции мы рассмотрели установку Hashicorp Vault как пакета. Также мы можем установить данный сервис в виде контейнера Docker из официального образа. Рассмотрим вкратце данный вопрос.




Для начала, необходимо установить в систему Docker. После загружаем образ




docker pull vault




Для запуска vault в режиме сервера вводим:




docker run --cap-add=IPC_LOCK --name vault -d -p 8200:8200 -e 'VAULT_LOCAL_CONFIG={"backend": {"file": {"path": "/vault/file"}}, "default_lease_ttl": "168h", "max_lease_ttl": "720h", "listener": {"tcp": {"address": "127.0.0.1:8200", "tls_disable": "true"}}}' vault server




После заходим внутрь контейнера:




docker exec -it vault sh




Задаем системную переменную для подключения к vault по http:




export VAULT_ADDR=http://127.0.0.1:8200




Инициализируем сервер:




vault operator init




… и так далее.




Установка клиента и удаленное подключение




Мы можем управлять нашим сервером с удаленного компьютера из командной строки. Для этого необходимо установить клиента и настроить системное окружение.




Установка клиента ничем не отличается от установки сервера. Только нам не нужно инициализировать систему и запускать ее в качестве сервиса. Операции отличаются в зависимости от установленной операционной системы.




а) для Debian / Ubuntu / Mint:




apt-get install wget apt-transport-https




echo "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main" > /etc/apt/sources.list.d/hashicorp.list




apt-get update




apt-get install vault




б) для CentOS / Red Hat / Fedora:




yum install wget




wget https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo -O /etc/yum.repos.d/hashicorp.repo




yum install vault




После чего задаем переменную системного окружения 




export VAULT_ADDR=https://vault.dmosk.local:8200




* обратите внимание, что мы подключаемся уже по https. Имя нашего сервера должно разрешаться в DNS или быть прописано в файле hosts на компьютере управления.




Также, если у нас самоподписанный сертификат, вводим:




export VAULT_SKIP_VERIFY=true




* данная системная переменная указывает системе не проверять валидность сертификата.




Пробуем посмотреть статус удаленного сервера:




vault status




Регистрируемся в системе:




vault login -method=userpass username=dmosk




* в данном примере мы заходим под пользователем dmosk. Также мы можем войти с использованием токена.




Можно выполнять действия согласно разрешениям.




источник: https://www.dmosk.ru/instruktions.php?object=vault-hashicorp



Установка и использование Grafana Loki на Linux

В нашей инструкции мы рассмотрим процесс установки и настройки Grafana Loki в качестве сервера сбора логов. Есть несколько способов ее установки — Helm chart, в качестве контейнера Docker, скачать готовый бинарник или собрать его из исходника. Мы выполним установку из последнего на систему Linux. Также, в качестве примера, мы прочитаем лог веб-сервера nginx и сделаем его вывод в Grafana.




Подготовка




Прежде чем устанавливать Loki, подготовим наш сервер для работы.




Установка пакетов




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




а) на системах Red Hat:




yum install git wget




б) для систем на основе Debian:




apt-get install git wget




Установка Go




Для компиляции исходника, нам необходимо установить Golang. Для этого переходим на страницу загрузки и копируем ссылку на архив с его последней версией:







* по умолчанию, страница предлагает загрузить Go для нашей операционной системы, поэтому, если мы открыли сайт на компьютере Windows, ниже под кнопкой загрузки выбираем Linux.




Воспользовавшись ссылкой, скачиваем архив на наш сервер:




wget https://golang.org/dl/go1.15.6.linux-amd64.tar.gz




* на момент написания инструкции, последняя версия была 1.15.6.




Распаковываем архив в каталог /usr/local:




tar -v -C /usr/local -xzf go*.tar.gz




Открываем файл:




vi /etc/profile




Добавляем в самый низ строку:




export PATH=$PATH:/usr/local/go/bin




Один раз выполняем данную команду:




export PATH=$PATH:/usr/local/go/bin




Проверяем, что go установлен и готов выполнять команды:




go version




Мы должны увидеть версию скачанного пакета.




Настройка безопасности




1. Брандмауэр




В зависимости от используемого брандмауэра, необходимо выполнить следующие настройки.




а) если используем iptables (по умолчанию, в системах на базе Debian):




iptables -I INPUT 1 -p tcp --dport 3100 -j ACCEPT




* данная команда добавит правило на разрешение порта 3100 (на котором, по умолчанию, запускается Grafana Loki).




Для сохранения правил устанавливаем пакет:




apt-get install iptables-persistent




Сохранение правил теперь можно выполнить командой: 




netfilter-persistent save




б) если используем firewalld (по умолчанию, в системах на базе Red Hat):




firewall-cmd --permanent --add-port=3100/tcp




firewall-cmd --reload




* данная команда добавит правило на разрешение порта 3100 (на котором, по умолчанию, запускается Grafana Loki).




2. SELinux




Как правило, в системах на базе Red Hat активирована дополнительная система безопасности. В нашей инструкции мы ее отключаем командами:




setenforce 0




sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config




* первая команда вводится до разового отключения SELinux. Вторая не дает ему запуститься после перезагрузки.




Установка




Установка Grafana Loki сводится к загрузке готового бинарника или исходника с последующей компиляцией. Также мы настроим юнит в systemd для работы приложения в качестве сервиса.




Копирование бинарника и конфигурационного файла




Переходим в каталог:




cd /usr/src/




Загружаем исходные файлы проекта:




git clone https://github.com/grafana/loki




Переходим в каталог loki:




cd loki/




Запускаем компиляцию бинарника:




go build ./cmd/loki




В текущем каталоге появится файл loki — перенесем его в каталог /usr/local/bin:




mv loki /usr/local/bin/




Создадим каталог:




mkdir /etc/loki




… и перенесем в него конфигурационный файл:




mv cmd/loki/loki-local-config.yaml /etc/loki/




В конфиге, который идет в исходнике в качестве рабочего каталога для Grafana Loki используется /tmp — мы это исправим двумя командами:




sed -i 's//tmp/wal//opt/loki/wal/g' /etc/loki/loki-local-config.yaml




* первой командой мы меняем настройку dir для wal (журнала предзаписи). 




sed -i 's//tmp/loki//opt/loki/g' /etc/loki/loki-local-config.yaml




* в данном примере мы заменили путь для storage_configworking_directory и ruler storage на /opt/loki.




Создаем каталог:




mkdir /opt/loki




Выполним первый тестовый запуск сервиса:




/usr/local/bin/loki -config.file=/etc/loki/loki-local-config.yaml




Открываем браузер и переходим по адресу http://192.168.0.15:3100/metrics, где 192.168.0.15 — IP-адрес нашего сервера Grafana Loki. Мы должны увидеть страницу с метриками:







Значит наш сервис запустился и нормально работает. Можно прервать его работу на сервере комбинацией клавиш Ctrl + С и продолжать настройку.




Автозапуск




Чтобы сервис мог автоматически запускаться при старте системы, добавим его в systemd. 




Для начала, создадим пользователя, под которым будет работать сервис:




useradd --no-create-home --shell /bin/false loki




* данной командой мы создадим пользователя loki. Ему нельзя будет входить в систему в качестве интерактивного пользователя, также для него не будет создана домашняя директория.




Делаем владельцем loki бинарник для запуска сервиса:




chown loki:loki /usr/local/bin/loki




Задаем владельца для рабочих каталогов Loki: 




chown -R loki:loki /etc/loki




chown -R loki:loki /opt/loki




Создаем юнит в systemd:




vi /etc/systemd/system/loki.service




[Unit]
Description=Grafana Loki Service
After=network.target

[Service]
User=loki
Group=loki
Type=simple
ExecStart=/usr/local/bin/loki -config.file=/etc/loki/loki-local-config.yaml
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target




Перечитываем конфигурацию systemd:




systemctl daemon-reload




Теперь можно разрешить и стартовать наш сервис:




systemctl enable loki --now




Проверить, что он запустился и работает можно командой:




systemctl status loki




Установка серверной части завершена.




Отправка логов на сервер




В нашем примере мы передадим логи веб-сервера NGINX в нашу Grafana Loki. Для этого переходим на сервер с NGINX и выполним следующие действия.




Установка Promtail




Promtail — агент, который читает и отправляет логи на сервер. Его установка во многом напоминает установку сервера — получаем бинарник и добавляем его в автозагрузку. В нашем примере мы загрузим уже скомпилированный файл для запуска.




Для начала, установим следующие пакеты:




yum install unzip wget




unzip нужен для распаковки архива с бинарником; wget — для скачивания архива.




Загружаем последнюю версию promtail для Linux:




wget https://github.com/grafana/loki/releases/latest/download/promtail-linux-amd64.zip




* в нашем примере загружается бинарник на систему 64-бит. На странице https://github.com/grafana/loki/releases можно скачать файлы для установки под Linux и Windows.




Распаковываем скачанный архив:




unzip promtail-linux-amd64.zip




Переносим бинарник в каталог /usr/local/bin:




mv promtail-linux-amd64 /usr/local/bin/promtail




* обратите внимание, что мы его сразу переименовали в promtail.




Создаем каталог для конфигурационных файлов promtail:




mkdir /etc/promtail




Создаем конфигурационный файл:




vi /etc/promtail/promtail.yaml




server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://192.168.0.15:3100/loki/api/v1/push




* где 9080 — номер порта, на котором будет слушать promtail; 192.168.0.15 — IP-адрес нашего сервера Loki, куда нужно отправлять данные.




Создаем юнит в systemd для promtail:




vi /etc/systemd/system/promtail.service




[Unit]
Description=Promtail Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail/promtail.yaml
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target




Перечитываем конфигурацию systemd:




systemctl daemon-reload




Разрешаем запуск сервиса promtail и стартуем его:




systemctl enable promtail --now




Проверяем статус:




systemctl status promtail




На клиенте в настройки брандмауэра добавляем правило на разрешение порта 9080.




а) если используем iptables (Debian, Ubuntu): 




iptables -I INPUT 1 -p tcp --dport 9080 -j ACCEPT




apt-get install iptables-persistent




netfilter-persistent save




б) если используем firewalld (CentOS, Red Hat):




firewall-cmd --permanent --add-port=9080/tcp




firewall-cmd --reload




После установки promtail открываем браузер и переходим на страницу http://192.168.0.25:9080/targets, где 192.168.0.25 — IP-адрес клиентского компьютера с NGINX. Мы должны увидеть страницу:




Веб-страница сервиса Promtail




Promtail работает. Можно приступать к сбору логов.




Настройка сбора логов




Открываем конфигурационный файл promtail:




vi /etc/promtail/promtail.yaml




… и добавляем:




...

scrape_configs:
- job_name: nginx
  static_configs:
  - targets:
      - localhost
    labels:
      job: nginxlogs
      __path__: /var/log/nginx/*log




* где:







Перезапускаем сервис promtail:




systemctl restart promtail




Снова заходим по адресу http://192.168.0.25:9080/targets — мы должны увидеть настроенное нами задание:







Сбор логов настроен.




Настройка Grafana




Переходим к серверу с Grafana. Он может быть установлен на отдельном сервере или на том же сервере с Loki.




Заходим в веб-интерфейс и переходим в Configuration — Data Sources:







Добавляем новый источник, кликая по Add data source:







Среди списка возможных источников выбираем Loki:







В настройках задаем имя и указываем IP-адрес сервера Loki:







* в нашем примере задается имя Loki и подключение к серверу 192.168.0.15.




Нажимаем на Save & Test:







Если мы увидели сообщение «Data source connected and labels found.»:







… значит подключение выполнено и можно двигаться дальше.




Переходим в раздел Create — Dashboard:







Кликаем по кнопке Add new panel:







В открывшемся окне выбираем в качестве источника данных Loki, затем кликаем по Log labels — выбираем job и nginxlogs:







Мы увидим Unable to graph data (так как логи представляют из себя данные, на основе которых нельзя постоить график) — кликаем по Switch to table view:







Мы должны увидеть строки из логов:







Логи NGINX отображаются в Grafana.




Парсинг лога




Мы увидели логи в графане, но они представленны в неудобном для отбора и фильрации виде. Попробуем это исправить с помощью парсинга логов на стороне promtail.




Открываем файл для редактирования:




vi /etc/promtail/promtail.yaml




Дополним нашу задачу для сбора логов NGINX:




...

scrape_configs:
- job_name: nginx
  static_configs:
  - targets:
      - localhost
    labels:
      job: nginxlogs
      __path__: /var/log/nginx/*log
  pipeline_stages:
    - match:
        selector: '{job="nginxlogs"}'
        stages:
        - regex:
            expression: '^(?P<remote_addr>[w.]+) - (?P<remote_user>[^ ]*) [(?P<time_local>.*)] "(?P<method>[^ ]*) (?P<request>[^ ]*) (?P<protocol>[^ ]*)" (?P<status>[d]+) (?P<body_bytes_sent>[d]+) "(?P<http_referer>[^"]*)" "(?P<http_user_agent>[^"]*)"?'
        - labels:
            remote_addr:
            remote_user:
            time_local:
            method:
            request:
            protocol:
            status:
            body_bytes_sent:
            http_referer:
            http_user_agent:




* обратите внимание, что к имеющейся настройки мы добавили pipeline_stages:







Перезапускаем сервис для promtail:




systemctl restart promtail




Идем в Grafana — в Log labels мы должны увидеть новые критерии для фильтра по тегам:







Пробуем добавить, например, фильтр по статусу ответа веб-сервера:







Источник: https://www.dmosk.ru/instruktions.php?object=grafana-loki