unsent

На Пикабу
поставил 277 плюсов и 167 минусов
отредактировал 0 постов
проголосовал за 0 редактирований
Награды:
5 лет на Пикабу
1718 рейтинг 1 подписчик 61 подписка 3 поста 0 в горячем

АДМ. Новосибирск - Рига.

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

Видать дочка вела себя очень хорошо, раз Дедушка Мороз отправил нам гигантскую посылку аж больше чем на 5 килограммов!Посылка пришла еще на почту еще до Нового Года, но из-за католического Рождества, забрать посылку смог только после Нового Года. Кстати посылка дошла за пару недель, что довольно быстро при загруженности почт на праздниках.

АДМ. Новосибирск - Рига. Длиннопост, Обмен подарками, Тайный Санта, Отчет по обмену подарками

Посылка была празднично упакованна.

АДМ. Новосибирск - Рига. Длиннопост, Обмен подарками, Тайный Санта, Отчет по обмену подарками

В подарке было много вкусных новосибирских конфет, сладостей, чай, носочки мне и жене, 3д пазл и мегакрутой заяц с веселой подушкой. Конфеты очень вкусные, Буревестник очень похож на наш местный, а вот Метелица весьма прикольные. Полкило настоящих вкусных ирисок это очень круто!

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

АДМ. Новосибирск - Рига. Длиннопост, Обмен подарками, Тайный Санта, Отчет по обмену подарками
АДМ. Новосибирск - Рига. Длиннопост, Обмен подарками, Тайный Санта, Отчет по обмену подарками

Заяц и подушка просто бесподобны! Спасибо Дедушка Мороз и с Новым Годом!

Показать полностью 4

Как картошечку готовил

По мотивам https://pikabu.ru/story/mamin_yeksperimentator_5414844

В классе 11-12ом пришел со школы и решил картошечки фри сделать. Начистил, налил масло в шурокию 5ти литровую кастрюлю из нержавейки с длинной ручкой, поставил на огонь, ну и пошел телек втыкать пока масло греется.

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

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

Как картошечку готовил Кипящее масло, Вода, Повар, Длиннопост

Сначала решил что нужно вылить масло в окно. Но вспомнил что под домом люди с остановки ходят, а на улице все-таки не 17-ый век что бы их кипящим маслом поливать.

Как картошечку готовил Кипящее масло, Вода, Повар, Длиннопост

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

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

Херово, подумал я. Но тут уже ничем не поможешь. Сделал будерброд и пошел гулять.


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

Спасли, наверное, те пол секунды пока росло давление в кране и вода еще не попала в кипящее масло.

Показать полностью 2

Создание Low-Level Discovery в Zabbix с использованием PowerShell.

Иногда нужно настроить мониторинг каких-либо объектов на серверах, которые могут изменятся, например IIS сайты\пулы, размеры файлов, размеры кластерных дисков, базы данных и прочее. Для получения самих значений можно использовать встроннее метрики, например Performance Monitor в Windows Server, либо же скрипты\запросы, которые их получают.

Трудности доставляют сами изменяющиеся объекты, которые могут добавлятся\убираться, и каждый раз ручками конфигурировать итемы на хостах как-то не хочется. Вот тут нам поможет Low-level discovery (LLD).


К примеру у вас есть сервер, на котором крутятся сайты, которые ваши разработчки с некой переодичностью добавляют\удаляют. Задача мониторить количество коннекций к сайту, количество get/head/post запросов, статус апликейшн пулов (запущен или нет).


Поскольку я Виндовый админ, то будем использовать PowerShell, но по такому же принципу можно написать на любом языке.


И так для создания нового LLD нужен скрипт,а даже 2, которые будет получать список сайтов и список пулов, конвертировать его в JSON формат и предоставлять Заббиксу.


Выглядит готовый JSON так:

{

"data":[

{ "{#SITE}" : "site1" },

{ "{#SITE}" : "site2" },

{ "{#SITE}" : "site3" }

]

}


А потом уже заббикс для каждого из объектов будет получать данные параметров, для сайтов используя запоросы в Performance Monitor, для пулов - скрипт.


Получать список объектов можно любым скриптом, главное что бы заббикс агент его смог запустить.


И так создаём фаил с названием get-sites.ps1

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

Import-Module WebAdministration

$sites = Get-ChildItem -Path IIS:\Sites -Name


Если вы тестите то для вывода результата введите $sites

Теперь весь список нужно представить в JSON формате, особенностью является то что в конце последнего значения объекта, не должна стоять запятая.

По этому вводим переменную $idx по которой мы будем проверять последний это объект или нет.

$idx = 1


Далее делаем шапку JSON:

write-host "{"

write-host " `"data`":[`n"


Далее будем каждый объект полученный ранее проверят последний он или нет.

Сверку будем проводить путем увеличения переменной $idx на 1, после создания каждого JSON объекта.

Если нет, то создаём JSON объект с запятой, если да, то создаём без запятой.

foreach ($currentsite in $sites) #каждый сайт из списка будет получать переменную $currentsite

{

if ($idx -lt $sites.count) #сравниваем $idx с количеством сайтов. -lt - меньше чем. Если получаем True то создаём строчку с запятой, если нет то двигаемся дальше.

{

$line= "{ `"{#SITE}`" : `"" + $currentsite + "`" }," # создание строчки с запятой

write-host $line

}

elseif ($idx -ge $site.count) # здесь опять сравниваем $idx с количеством с сайтов. -ge - больше или равно чем. Если True то создаём строчку без запятой

{

$line= "{ `"{#SITE}`" : `"" + $currentsite + "`" }" #строчка без запятой

write-host $line

}

$idx++; #В конце каждого прохода увеличиваем $idx на 1.

}

Ну и закрываем JSON.

write-host

write-host " ]"

write-host "}"


Логика проста: Получаем список сайтов, например 3 сайта. Значит нужно 3 прохода для создания 3 строчек для JSON.

Первый проход первый сайт. $idx=1. 1<3? Да. Создаём с запятой. Увеличиваем $idx на 1.

Второй проход второй сайт. $idx=2 . 2<3? Да. Создаём с запятой. Увеличиваем $idx на 1.

Третий проход третий сайт. $idx=3. 3<3? Нет. Идем дальше. 3>=3? Да. Создаём без запятой.


Таким же образом создаём скрипт get-apppool.ps1 для получения списка пулов:

Import-Module WebAdministration

$apppool = Get-ChildItem -Path IIS:\Apppools -Name

$idx = 1

write-host "{"

write-host " `"data`":[`n"

foreach ($currentapppool in $apppool)

{

if ($idx -lt $apppool.count)

{

$line= "{ `"{#APPPOOL}`" : `"" + $currentapppool + "`" },"

write-host $line

}

elseif ($idx -ge $apppool.count)

{

$line= "{ `"{#APPPOOL}`" : `"" + $currentapppool + "`" }"

write-host $line

}

$idx++;

}

write-host

write-host " ]"

write-host "}"


Далее оба скрипта кладем на сервер, например туда где стоит заббикс агент и в конфиг агента добавляем 2 юзер параметра:

UserParameter=apppool.discovery,powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix_agent\scripts\get-apppool.ps1"

UserParameter=site.discovery,powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix_agent\scripts\get_sites.ps1"


(Если честно, то не помню, нужно ли включать ActiveChecks и EnableRemoteCommands в конфиге. У меня везде включено.)


apppool.discovery и site.discovery - будут использиваться как ключи при создании LLD для запуска соответсвующих скриптов.


Далее в Заббиксе нашего сервера создаём новый дискавери:

Name: IIS Site #Название дискавери

Type: Zabbix agent #то чем будем делать дискавери

Key: site.discovery #ключ для вызова скрипта с получем списка сайтов. Мы его указали в UserParameter в конфиге агента на сервере

Host interface: айпишка и порт агент на сервере

Update interval (in sec): 3600 #как часто будем вызывать скрипт и получать список сайтов

Keep lost resources period (in days):3 #через сколько удалять сайтов, которых больше нет.


В фильтрах можно указать какие сайты исключить из списка.

Label Macro {#SITE} Regular expression @IIS

Сам список IIS создаётся в Administration > general > Regular Expresssions.

Например можно исключить Default Web Site для этого создаём список IIS и добавляем Expression type: Result is False; Expression: Default Web Site


Далее создаём прототипы айтемов в дискавери. Они практически ничем не будут отличаться от создания обычных айтемов. Только для объявления сайта используем {#SITE}


Например количество коннекций к IIS сайту. Данные получаем с Performance monitor:

Name: {#SITE}: Current connections

Type: Zabbix agent

Key: perf_counter[\Web Service({#SITE})\Current Connections]

Type of information: Numeric (unsigned)


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


Создаём PowerShell скрипт get-apppoolstate.ps1

param ([string] $name = 0)

Import-Module WebAdministration

$apppoolState = Get-WebAppPoolState -name "$name"

Write-Output ($apppoolState.value)


Сохраняем и кладем к агенту, туда куда и прошлые скрипты. Добавляем UserParameter в конфиг:


UserParameter=apppool.state[*],powershell -NoProfile -ExecutionPolicy Bypass -File "C:\Program Files\Zabbix_agent\scripts\get_apppoolstate.ps1" "$1"


apppool.state - ключ для вызова скрипта.

[*] - параметр который мы будем передавать вместе с ключем, в нашем случае имя пула

$1 означает что мы будем передавать имя пула в скрипт, внутри скрипта имя пула пойдет в параметр $name


Теперь создаём дискавери для мониторинга апликейшн пулов создаём новый дискавери.

Name: IIS AppPool

Type: Zabbix agent

Key: apppool.discovery

Остальное как для сайта.


Создаём прототип айтема:

Name:IIS AppPool {#APPPOOL} state

Type:Zabbix agent

Key:apppool.state[{#APPPOOL}]

Type of information: Text


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

Например что пул не запущен:

Name: IIS AppPool {#APPPOOL} is down

Severity: Disaster

Expression: {MyWebServer:apppool.state[{#APPPOOL}].str(Stopped)}<>0

Показать полностью
Отличная работа, все прочитано!