172 похожих чатов

Всем привет. Бывают ситуации, когда процесс внутри контейнера убивается OOM'ом на

хосте.
Но при этом это был не основной процесс контейнера, и в кубе это событие вроде никак не регистрируется (pod не перезапускается, OOMKilled не показывается в статусах). Зато в логах ядра можно найти что-то вроде

[16497976.197435] oom-kill:constraint=CONSTRAINT_MEMCG,nodemask=(null),cpuset=cri-containerd-33203b8683eb11c8b1a56e5d075ccdf5a55c9592d038e766532a5e7a374095a8.scope,mems_allowed=0,oom_memcg=/kubepods.slice/kubepods-pod2f326fad_40e2_4817_8d43_da7b51daeb73.slice,task_memcg=/kubepods.slice/kubepods-pod2f326fad_40e2_4817_8d43_da7b51daeb73.slice/cri-containerd-33203b8683eb11c8b1a56e5d075ccdf5a55c9592d038e766532a5e7a374095a8.scope,task=xxxx,pid=3108415,uid=4351
[16497976.197464] Memory cgroup out of memory: Killed process 3108415 (xxx) total-vm:299620kB, anon-rss:23472kB, file-rss:35600kB, shmem-rss:0kB, UID:4351 pgtables:828kB oom_score_adj:-997

Кто как собирает и обрабатывает эти события? Пока не знаю чего конкретно хочу. Возможно обогатить этот лог мета инфой (containerName, pod, имя ns) 🤔. Возможно есть какие-то стандартные вещи для этого. Логером парсить uid, искать его в kubelet API, соденеять по pid процесса эти два лога, кажется для логера слишком сложно

31 ответов

46 просмотров

Мы логи хостов как и всего остального кидаем в CloudWatch и там есть встроенный механизм алертинга

Dmitry-Sergeev 🇺🇦 Автор вопроса

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

Dmitry Sergeev 🇺🇦
залить то не проблема. Но хотелось бы видеть что э...

Смотря чем коллектишь. У флбентД есть парсер

Dmitry-Sergeev 🇺🇦 Автор вопроса
Serhii Sergey
Смотря чем коллектишь. У флбентД есть парсер

у всех есть парсер, но это не логов pod'а. Это логи ядра

Dmitry Sergeev 🇺🇦
у всех есть парсер, но это не логов pod'а. Это лог...

А у самого процесса есть мониторинг? Может стоит реагировать на up == down?

Если напишешь в понедельник в личинку - дам рецепт.

Sergei Mikhaltsov
Если напишешь в понедельник в личинку - дам рецепт...

Ты можешь тут дать рецепт. Это может быть всем интересно :)

Kirill Garbar
Ты можешь тут дать рецепт. Это может быть всем инт...

Дам, но щас куи пинаю и мне лень. Так и быть тут кину позже

Dmitry Sergeev 🇺🇦
у всех есть парсер, но это не логов pod'а. Это лог...

У флюентД есть прекрасный хак - юзать руби в парсере. И там можно творить любую дичь, юзая полноценный язык программирования(почти) :)

Sergei Mikhaltsov
Дам, но щас куи пинаю и мне лень. Так и быть тут к...

кароч вот https://github.com/sapcc/kubernetes-oomkill-exporter , и промеетем метрики снимаются. Загоните сударю звездочек что ль

Igor Ignatev
еще один заброшенный труп

О госпаде. Форкни и коммить каждый день

Dmitry-Sergeev 🇺🇦 Автор вопроса
Виталий
А у самого процесса есть мониторинг? Может стоит р...

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

Dmitry-Sergeev 🇺🇦 Автор вопроса
Serhii Sergey
У флюентД есть прекрасный хак - юзать руби в парсе...

заюзать ruby/lua не проблема. Но передавать доступы в этот конфиг чтобы он для определенных сообщений ходил в API куба, доставал все поды, искал с нужным uid, мне кажется прям как-то костыльно и не очень

Dmitry-Sergeev 🇺🇦 Автор вопроса
Igor Ignatev
еще один заброшенный труп

так твой reflector на C# такой-же труп, там релизы за последний год для галочки. Чисто чарт поправили и depended bot зависимости обновил. Под категорию релизов каждые 3-4 месяца оно точно не подходит. Ну и для куба, на C#, для куба, на C#, для куба на C# (меня это сломало) Поэтому такой-же труп по твоим сущностным критериям

Dmitry-Sergeev 🇺🇦 Автор вопроса
Dmitry-Sergeev 🇺🇦 Автор вопроса
Sergei Mikhaltsov
кароч вот https://github.com/sapcc/kubernetes-oomk...

по описанию - вроде ловит только ООМК подов, а не всех процессов в них

John Smith
по описанию - вроде ловит только ООМК подов, а не ...

Не, всё ловит, что хотели в сабже. Сам юзаю

Dmitry Sergeev 🇺🇦
так твой reflector на C# такой-же труп, там релизы...

ключевая фраза депендабот обновляет зависимости. в чем проблема с шарпами и кубом? на самом деле прекрасно все там

Igor Ignatev
ключевая фраза депендабот обновляет зависимости. в...

А как же манипуляторы набора кода размещенные на поясе?

Dmitry-Sergeev 🇺🇦 Автор вопроса

прикольная штука, я сначала не понял как так мало кода, и они берут это из node problem detector https://github.com/sapcc/kubernetes-oomkill-exporter/blob/master/main.go#LL15C10-L15C31 у которого уже готовый watcher и парсер для kernel логов есть

Dmitry-Sergeev 🇺🇦 Автор вопроса
George Gaál
А ноде проблем детектор нельзя допилить ?

Да можно наверное, я прост не уверен правильно ли это будет. Хотя это же прост допонительная метрика

Dmitry-Sergeev 🇺🇦 Автор вопроса
John Smith
по описанию - вроде ловит только ООМК подов, а не ...

он там по коду /dev/kmsg парсит затем из лога достает container id, а потом уже из containerd достает всю инфу лейблы, ns, pod и т.д.

Dmitry-Sergeev 🇺🇦 Автор вопроса
Igor Ignatev
ключевая фраза депендабот обновляет зависимости. в...

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

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта