Настраивать NetIQ поручили мне, и тот, кто это делал до меня, не сказал о ней ни единого слова. Печатного. Вскоре я понял, почему. Стив Джобс наверное вертится в могиле, глядя на подобный интерфейс:
В одной строчке логика «птички» положительная (Raise event). В другой отрицательная (Do not raise event). Как работает «Only raise events when» с разным набором галочек я вообще понял только экспериментально (и уже забыл).
Впрочем, значительно более плохой чертой NetIQ была ее ломкость. Ее агент, который устанавливался на каждый сервер, был значительно более уязвим, чем сама Windows. Мало памяти? Агент вылетел. CPU 100%? Агент не отвечает. На диске осталось 0 байт — что бы вы думали? Чтобы отправить сообщение, агент вначале должен его сформировать на диске, в виде файла… Ну, вы поняли.
Тем не менее с этим кое как жили, пока эту компанию не купила компания еще больше. Когда монстр съедает крошечную фирму, то эта фирма растворяется, как капля в море. В нашем случае мы сами по IT меркам были лишь ненамного меньше тех, кто нас купил, и сразу было очевидно, что процесс слияния будет очень сложным. Настолько сложным, что какое то время нас вообще не трогали и внутренне все процессы оставались теми же. Это состояние было похоже на момент, когда Кольцо Всевластья упало на лаву, но еще не начало плавиться:
Тем временем я отапгрейдил NetIQ с версии 7 на 8 и далее на 9, когда и начались наши проблемы. NetIQ мониторила всего несколько вещей: доступность самого сервера, память, CPU, диск и главное — сервисы. Если наши самописные сервисы были в «Automatic», то они должны были работать. Вот такого быть не должно:
Вот эти события в большинстве случаев и перестала мониторить NetIQ. После недели экспериментов и недели работы с саппортом, мы выяснили, что «это не бага, это фича» и что алерт создается только при определенном exit code. А наши сервисы иногда падали с любыми кодами.
Прошло много времени и откатываться назад было поздно. Как вы понимаете, обнаружив, что наша критическая инфраструктура не мониторится, мы немедленно… ээээ… ничего не сделали. Потому что к этому времени «растворение» нашей фирмы в бОльшей вошло в активную фазу, и выглядело это примерно так:
До меня долетали далекие раскаты грома, крики, молнии, и выглядело это так, что решаются судьбы мира, а я лезу с какой то мелкой технической проблемой… А я не мог спокойно спать, зная, что наш мониторинг наполовину ослеп.
Поняв, что помощи ждать некуда, я решил быстренько написать сканнер сервисов, который бы обходил все сервера и посылал бы письмо, если что не так, как это делала NetIQ. Вы наверное думаете, что я использовал Powershell? Нет. Если у вас в руках молоток, то все вокруг — гвозди, а если вы DBA и работали с SQL с версии 6.0 — то… Небольшая выдержка из кода, чтобы вы поняли, о чем идет речь:
Сделал я это за несколько часов. В течение нескольких следующих дней появился аудит сообщений, параметры и другие вкусности. Почитав про команду WMIC я уже не смог остановиться. Дальше пара недель как в тумане. Очнулся я, когда все то, что мы использовали в NetIQ, было переписано и работало на ура.
Функциональность была не просто скопирована — я реализовал все свои фантазии, все, чего я хотел бы от такой системы. LOWDISK — вы получаете еще и график, как вело себя свободное место на диске последнее время — нормальный ли это рост или чтото пошло не так. Мало памяти — вот и график, и список процессов и сколько они занимают, а для w3wp.exe мы еще дорисуем имя application pool, умные reminders и многое другое. Кстати, список серверов система умела самостоятельно брать из VMware. Одного беглого взгляда на subjects алертов в телефоне хватало, чтобы понять, что происходит:
Современные программисты настолько приучены мыслить абстрактно, что не могут написать мониторинговую систему иначе как 'для сервера мы запускаем набор абстрактных мониторинговых скриптов, и нас не волнует, что внутри', тогда как мониторинг каждого состояния — диск, память, CPU, сервисы — по своему уникальны. Реализуя это «абстрактно», вы делаете одинаково убого для каждого случая, и происходит вот это: (Это скриншот из email от SCOM. Наверняка выполнено строго по ТЗ)
Огромный плюсом новой системы было то, что она была agentless, соответсвенно, не было никаких проблем с установкой агента, его падениями — там просто нечему было падать. Система была проста и надежна как молоток.
Следующие несколько месяцев я приходил утром на работу, становился перед своим детищем, как художник перед полотном и наносил пару штрихов, делая его еще идеальнее. Так как у меня не было никаких дедлайнов, то и technical debt был сведен к минимуму. В какой то момент я все таки заставил себя остановиться.
NetIQ все еще работала, но новый вид алертов всем нравился больше, и постепенно я всех перевел на алерты от новой системы, не выключая, однако, старую. Тем временем, процесс «расплавления» вступил в заключительную стадию:
Что же, сказка должна была закончиться. Я еще сам удивлялся, что смог столько развлекаться в крупной забюрократизированной компании. После месяца подготовки мне сказали, что через неделю все, гасим NetIQ, переходим на SCOM. Я выключил NetIQ (признаюсь, я так его ненавидел что мне это было очень приятно) и стал ждать SCOM. Но в назначенное время его не было. Не было и через неделю, и через месяц.
SCOM появился только через шесть месяцев — ктото забыл, сколько у нас серверов и сколько нужно лицензий для SCOM. За шесть месяцев столько систем стали зависеть от моей системы, которая стала вести и инвентории, метрики, и многое другое, что спокойно осталась второй — неофициальной. Для аудиторов есть SCOM, а все реально полезное — во второй системе.
Иногда менеджеры разного уровня задавились вопросом — а откуда идут вот эти автоматизированные emails? Недавно я подробно им описал историю, которую изложил в этой статье, и они весело посмеялись. Хотя мне до сих пор иногда и самому забавно, как в большой бюрократизированной компании можно «тихой сапой» протащить многие вещи. Да и приятно просто пописать код, как в старые добрые времена.
Комментарии (70)
impwx
21.11.2018 19:09Расскажите поподробнее для непосвященных, как именно оно работает. SQL-скрипт рассылает запросы по сети с центрального компа, или выполняется локально на каждом проверяемом сервере?
khim
21.11.2018 19:17Я работал в нескольких «больших бюрократизированных компаниях» и почти везде наблюдал этот феномен: куча всякого добра «по феншую» с тоннами документации, аудитом и прочим — и всё это накрывается, когда, условно говоря, уборщица случайно выключает рабочую станцию какого-нибудь чувака. Который устал пробивать эти бумажные тома, словно придуманные для того, чтобы никто ничего не мог сделать и сделал что-то «сбоку на коленке» — и оно работало, пока кто-то не уронил.
Tzimie Автор
21.11.2018 20:36Согласен — часто большие компании еще существуют потому, что ктото идет вопреки правилам и все таки делает работу
blind_oracle
21.11.2018 19:59А что, Zabbix давным давно в этой далекой галактике не изобрели еще?
Tzimie Автор
21.11.2018 20:03Он тоже где то используется, но нам спустили SCOM как копроративный стандарт.
blind_oracle
21.11.2018 20:23Я к тому что пока не было SCOMа поднять Zabbix заняло бы с часик.
Tzimie Автор
21.11.2018 20:35Я предлагал это шефу. Но он просто не отвечал, так как был увлечен бюрократическими битвами, в которых в итоге проиграл. На несколько месяцев я вообще был предоставлен сам себе. А в Zabbix есть агент?
blind_oracle
21.11.2018 20:35А, ну тогда это проблемы шерифа :) Да, конечно есть агент в т.ч. под винду.
Insane11
22.11.2018 10:14Радуйтесь, что не Tivoli. )
Tzimie Автор
22.11.2018 10:44Расскажите! Чтобы кто нибудь не ступил туда, как эта фирма в netIQ в свое время
Insane11
22.11.2018 10:56Да особо и нечего рассказывать, был у нас один маленький, но гордый Zabbix, который всё всё мониторил, смски отправлял, графики/трэнды рисовал, завки в хэлпдеске создавал, и есть не просил. Но один эффективный менеджер сказал, что это не Энтерпрайз и теперь у нас вместо одного заббикса, комплекс из полусотни серверов, и по пять агентов на каждом сервере, и убогий джава клиент, которому нужен 3-d party агрегатор, чтобы рисовать адекватные графики. И само собой всё это стоит много денег. #IBM #кровавыйэнтерпрайз =(
alex_fort
21.11.2018 23:12-1Мне как-то клиент Zabbix не давал обновить Exchange. И ещё несколько неприятных моментов было. Nagios, в любом случае, лучше.
blind_oracle
22.11.2018 00:03Это как это он не давал? Руки заламывал? :)
Из опенсурсного, довольно объективно, ничего лучше Zabbix нет — его даже Яндекс взял в свое время, правда очень сильно оптимизировав под Oracle.
Nagios трогал в последний раз лет 10+ назад и больше не хочу. Возможно, конечно, он с тех пор стал лучше, но сомневаюсь.
Ranger21
21.11.2018 20:03+2«Почитав про команду WMIC я уже не смог остановиться. „
SQL SERVER работает под доменной учётной записью, у которой есть доступ по WMI к другим серверам?
Б — Безопасность. В данном случае непонятно как эти вопросы решались, либо всё “дыряво». Надеюсь эта учётная запись не является админской на всех серверах.Tzimie Автор
21.11.2018 20:05Это был как раз один из старых серверов NetIQ, который имел доступ ко всем другим серверам, что является исключением. И что для netIq, что для Microsoft SCOM таки да — создается service domain account с неустаревающим паролем и почти админскими правами и агент везде работает из под него.
PSVITAmins
22.11.2018 15:25Не совсем так, по умолчанию (и по рекомендациям МС) агент SCOM работает из-под системы и с компами по сети и доменом ничего сделать не может. Это важно.
Tzimie Автор
21.11.2018 20:07И опять таки, только один SQL server работал из под этой учетной записи. Б — безопасность это не чтото не делать никогда, а чтото делать контролируемо.
TimsTims
22.11.2018 15:21Просто SQL то работает под этой учёткой, а если вы вдруг дадите доступ к своему SQL, чтобы на ваши логи кто-то автоматически привязался, потом еще кому-то. Потом пользователей становится столько, что однажды вы ошибаетесь, и даёте слишком высокие привилегии, и вот он уже владеет service domain account, и может делать любую дичь.
Претензии к MSSQL только в том, что если в нём выключен impersonate (а он отключается например, если у вас не windows-аутентификация, а sql-аутентификация), то это может плохо кончиться.Tzimie Автор
22.11.2018 15:34А как это связано? SQL server работает под СуперПупер account. Я хочу другим людям дать доступ к информации на нем. Как это связано с account, под которым он сам работает? Я создал логины другим группам AD и раздам права… Никакого доступа к СуперПупер account им ненужно
WondeRu
21.11.2018 20:59+1Блин, как же я радуюсь new relic + pager duty! Zabbix’у тоже радуюсь, но меньше! Автор, вы — молодец)
Turilion
21.11.2018 23:44На что только не пойдут, лишь бы не использовать zabbix. И да. Б-безопасность. Учетка с неустареваюшим паролем и правами WMI и RPC. А-я-яй так делать. Не хватает коврика "добро пожаловать" перед КД. И ведь прочтает какой ни будь новичеки не один. И повторят, чего доброго.
Tzimie Автор
22.11.2018 00:08А от кого вы защищаетесь? Все эти серверы внутри безопасного периметра и закрыты от интернета. А от внутренней обезьяны с гранатой это все равно не поможет. И таки да, агенты устанавливаются под специальными эккаунтами… по рекомендации Microsoft… И сертифицируются аудиторами для SSAE18 — типа все зашибись
Tzimie Автор
22.11.2018 00:10С другой стороны, кого интересует, насколько вы РЕАЛЬНО защищены? Если у вас 10 эккаунтов с паролями разной длины, сложности и временем устаревания то все отлично — требования аудиторов выполнены! Ну а то что 95% людей будут эти пароли держать на листочках никого не интересует.
Turilion
22.11.2018 10:47-1У аккаунтов пользователей нет прав на удаленное управление системой. Так что хоть 10, хоть 210, с этого вектора ничего сделать не смогут. А в вашем случае аккаунт с правами удаленного исполнения кода с неустаревающим паролем. Не есть хорошо. Заббикс поднимается за 2 часа + еще 30 минут на настройку обнаружения хостов. 15 мин на настройку ГПО. Через час у вас все ваши машинки в мониторинге. Все. И без ущерба корпоративной бещопасности. Я понимаю ваше негодование, вы изобрели велосипед, поделились плодами своего труда с сообществом, а тут в вас экскрементами кидаются. Приятного мало. Но и вы поймите, есть решение, фактически отраслевой стандарт — значит нужно пользоваться. Не умеете — значит нужно изучить и научиться, вы как профессионал, должны уметь пользоваться рабочими инструментами. Изобрели свой велосипед ради развлечения или попрактиковаться, тоже понимаю, сам так делаю, что бы не терять навыков. Но не надо публиковать в профильном сообществе и ждать восторга. Не оценят.
Tzimie Автор
22.11.2018 11:01«аккаунт с правами удаленного исполнения кода с неустаревающим паролем. Не есть хорошо» — и тем нен менее стандартное решение одобренное свыше (security group фирмы).
Tzimie Автор
22.11.2018 11:02«Заббикс поднимается за 2 часа + еще 30 минут на настройку обнаружения хостов» — плюс от двух недель все это проаппрувить (особенно установку агентов на PROD) — а реально месяц. А в той ситуации, когда шеф почти не реагировал ни на что — вообще
Turilion
22.11.2018 11:1730 минут на настройку обнаружения и ГПО. Далее агент средствами ГПО сам разьедется по хостам а обнаружение найдет эти хосты и раскидает по группам в забиксе и навесит нужные шаблоны.
Tzimie Автор
22.11.2018 11:23+3Вы не прочитали что я ответил. Это большая корпорация. Чтото сделать технически может 5 минут, а проаппрувить/пропихнуть — месяц.
Turilion
22.11.2018 11:20Знаю о чем говорю, потому как пол-года назад поднял таку же систему на пол-тысаче хостов за день.
mikhailian
22.11.2018 00:39Подпольный программист в чистом виде. Отличная работа. Заберу в копилку. Может, нам пора общий тег?
Tzimie Автор
22.11.2018 10:44Забавные истории у вас
mikhailian
22.11.2018 15:00Я вот думаю, как назвать таких людей. Пока что звал "подпольные программисты", но наверно лучше тайные. "Тайные программисты".
HerrDirektor
22.11.2018 16:10Я могу рассказать не один десяток таких, из стародавних времен, когда я работал в госконторе (самое начало века). Адская бюрократия между филиалами, когда годами можно ждать вердикта «можно/низя» по проблеме, абсолютная несогласованность ПО и инструментов (локальные БД, свертки-выгрузки, сотни разных версий одного и того же ПО по стране)… Бррр.
Kutak
22.11.2018 04:37Главное, чтобы про это не прознал «эффективный менеджер» или, к примеру, «эффективный ИТ-безопасник». А то ещё покарают. Нарушил, мол, процедуры, не задокументировал, или ещё чего придумают.
Но вот это:
Да и приятно просто пописать код, как в старые добрые времена.
Я прекрасно понимаю ваши чувства. Иногда так хочется сделать что-нибудь полезное, используя свои профессиональные навыки. Трудно сопротивляться этому желанию.mihmig
22.11.2018 12:07Да и обычный (компетентный) безопасник может возбудиться: как это, на прод серверах есть возможность запускать произвольные команды? Да ещё с правами администратора?
gwathedhel
22.11.2018 08:30Зачем нужно изобретение велосипеда, когда есть zabbix?
Как опыт конечно интересно, но… Кажется у вас было много свободного времени на работе))vesper-bot
22.11.2018 10:01Я так понимаю, из-за проблем агентов NetIQ хотелось полностью agentless систему. Заббикс не подошел, ибо не является agentless, а так как винду можно пониторить по remote WMI, если есть права, понеслась.
Tzimie Автор
22.11.2018 10:46Вспоминая, да — поставить агента на сотни PROD серверов тайно — все таки черезчур, так что мне подходило только agentless
alexanster
22.11.2018 10:48+1Хотя мне до сих пор иногда и самому забавно, как в большой бюрократизированной компании можно «тихой сапой» протащить многие вещи.
Так это исключительно потому, что не потребовалось ни копейки бюджетных денег. А ещё потому, что у вас была масса свободного времени и голова варит правильно.
snvtr
22.11.2018 10:58+1Очень похоже на мою историю. 20 лет назад я понял, что мне нужно какое-то средство мониторинга серверов и сервисов. Опыт у меня был только с sun netmanager и не очень хороший (хотя я под него и под нетварь написал на корявом C, от которого мне до сих пор стыдно, модули для мониторинга кучи нетваревских серверов). Перепрбовал несколько крупных продуктов от монстров типа HP и других и понял, что проще написать что-то самому. Взял snmp + perl + wsh + mssql с мордой на IIS, тогда еще 4.0, и в итоге система разрослась до таких размеров, что в пике в инвентори было более 500 windows серверов, красивые графики работы всего в онлайне, всякая кастомная статистика работа системы, по запросу разных подразделений я допиливал и допиливал новые вещи, данные хранились в легко читаемом виде в mssql. Потом нас поглотила большая корпорация. Я уже 6 лет не работаю там, но, как говорят, моя система до сих пор работает и обслуживает тот самый сегмент системы :-О И как смотрел я на всякие заббиксы и OpenView немного сверху, так и продолжаю.
BobKexit
22.11.2018 18:22+1Кхм. Однажды собирал данные с многих mongo-северов в одно хранилище на MS SQL. Почему-то сделал в виде табличных UDF-функций. Например,
SELECT * FROM dbo.GetChequesSql(...)
где GetChequesSql была реализованна на C# (да, можно на шарпе под TSQL кодить, но есть грабли). Можно Ваш функционал расширить вызовами к любым портам.
А для xp_cmdshell обязательно настройте sp_xp_cmdshell_proxy_account. Тем более у Вас здесь отличное место для sql-инъекцииTzimie Автор
22.11.2018 18:23proxy идея правильная! (у нас правда эти сервера чисто айтишные и доступа к ним почти ни у кого нет, но в принципе да, так правильнее)
alex-khv
23.11.2018 13:07+1Каждый сисадмин пишет свою систему мониторинга.
SQL like опросы можно юзать вот так
https://osquery.io
DJBlend
И что планируете делать дальше с этим добром? В опен сорс? На рынок?
Tzimie Автор
Не очень понятно. Вроде все сделанное в фирме ей и принадлежит, но на open source может и уговорю
DJBlend
Скорее всего, так и есть. Для трудового договора обычное дело. Но, наверняка в компании есть аналитики или топы, которые могли бы оценить перспективы упаковки системы в продукт, если их заинтересовать. Безагентное решение тема интересная.
paranoya_prod
Не-а, если нет отдельного договора на отчуждения авторского права, то всё это принадлежит Вам. То же самое, если в трудовом договоре нет пунктов о том, что всё, что Вы сделаете на территории фирмы и на оборудовании фирмы принадлежит фирме.
Так что — весь код лично Ваш.
На Хабре появляются юристы, думаю, они подтвердят мои слова.
За оригинальное решение, если-бы мог, то поставил Вам плюс. Хотя, с 2008 сервера Винда умеет пересылать свои журналы на один компьютер-сборщик. Так-что пробегать по всем серверам может и не надо.
Кроме этого, на события в журналах можно ставить обработчики и с их помощью так-же можно построить систему мониторинга (либо доработать Вашу, если у Вас сделано не так) и автоматизировать выполнение операций по обслуживанию.
vesper-bot
Читал про этот remote event collector, ругают, то у них конкретные события перестают отправляться, то вообще все, мол, ненадежно.
mihmig
А где можно подробнее почитать, как это сделать? Насколько мне известно, система журналирования Windows сделана так, что прочитать (даже сохранённый, скопированный) журнал на другой машине — та ещё задача:
Если на другом компьютере не установлен аналогичный софт, то имеем ошибку:
Не удается найти описание для идентификатора события 1000 из источника VMware Tools. Вызывающий данное событие компонент не установлен на этом локальном компьютере или поврежден. Установите или восстановите компонент на локальном компьютере.
Что сводит на нет всю идею резервирования журналов.
На мой взгляд надёжнее посылать журнал сразу в текстовом виде на linux-машину с rsyslog, может знаете какие решения?
paranoya_prod
Подробней почитать можно отсюда (извините, что посылаю Вас в Гугл, но так более информативно): Windows Event Forwarding
Для самостоятельного чтения журналов Windows существуют сторонние программы которые находится очень быстро.
Резервирование журналов можно настроить нативно из встроенного средства просмотра событий. Там же можно настроить обработку возникших событий.
Если взять Ваш пример с VMware Tools, то можно написать обработчик, который установит недостающее при появлении события с кодом 1000 и источником «VMWare Tools». Скажу сразу, сам такую автоматизацию не делал, но вполне можно написать скрипт, посылающий уведомление админу и/или устанавливающий нужный софт. Придётся, правда, повозиться с отладкой скрипта, так как не всё однозначно и Майкрософт по-особому смотрит на внедряемые возможности.
Tzimie Автор
Да, типичный подход Microsoft
kozar
Если это «большая бюрократизированная компания», то было бы странно, если такого пункта в договоре не было. У «одного моего знакомого», который в очень большой софтверной компании работает, такой раздл, как и NDA, обязательно прилагается.
paranoya_prod
Хм, даже у сисадминов в большой компании в договоре есть пункт «всё написанное тобой — наше»?
Busla
Не нужно быть юристом, нужно просто уметь читать. ч. 4 ГК РФ статья 1295 п. 2 «чёрным по-русскому» говорит совершенно иное:
paranoya_prod
Не стоит объединять понятия «авторского права» с «исключительным правом». Это два отдельных термина. Авторское право право включает в себя исключительное право.
Busla
Это вы сами с собой спорите? ;-)