Pull to refresh
77
28
Дмитрий Синявский @r3code

SRE

Send message

Как ELK довел нас… до Vector.dev и Clickhouse

Level of difficultyHard
Reading time7 min
Views6.6K

Меня зовут Дима Синявский, я SRE-инженер в Vi.Tech — это IT-дочка ВсеИнструменты.ру. В этой статье расскажу я вам о том как мы развивались и с нами развивалась наша система логирования. Почему вам нужен Vector.dev + Clickhouse для хранения и когда это выгодно.

Когда компания была маленькой нам хватало и блокнота, чего сейчас уже не скажешь.
У нас 931 000 пайплайнов в месяц, 4 кластера Kubernetes: от 170 до 190 нод в каждом, и 200 ГБ логов ежедневно.

cat elk-vector.md | more // Прочитать...
Total votes 26: ↑26 and ↓0+29
Comments34

Советы Golang: почему указатели на срезы полезны и как их игнорирование может привести к хитрым ошибкам

Reading time4 min
Views13K

Сегодня, пока я работал, возник хороший вопрос:

Почему во многих встроенных функциях и библиотеках я часто вижу в качестве аргументов указатели на срезы, ведь срезы всегда передаются по ссылке, не так ли?

Читать далее
Total votes 6: ↑5 and ↓1+8
Comments6

Параллельные интеграционные тесты базы данных Postgresql в приложении GO

Reading time5 min
Views6.3K

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

В идеале, каждый тест должен быть независим, так они не затронут друг друга. Другими словами, каждая тестовая функция имеет свое состояние. Это хороший признак для использования параллельных тестов. Для получения своего персонального набора данных для каждой тестовой функции я создал функцию, которая при запуске теста создает временную схему, загружает в нее данные и уничтожает схему после завершения теста. Каждая созданная схема содержит хеш в имени для предотвращения конфликтов имен.
Читать дальше →
Total votes 11: ↑10 and ↓1+9
Comments14

Проводим ревизию ошибок

Reading time3 min
Views2.3K

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


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



картинка отсюда

Читать дальше →
Total votes 10: ↑9 and ↓1+8
Comments2

Освобождаемся от обработки ошибок, устраняя ошибки

Reading time4 min
Views6.8K


Go2 имеет целью уменьшить накладные расходы на обработку ошибок, но знаете ли вы, что лучше, чем улучшенный синтаксис для обработки ошибок?

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

Эта статья черпает вдохновение из главы «Define Errors Out of Existence”» книги « A philosophy of Software Design» Джона Оустерхаута. Я постараюсь применить его совет к Go.
Читать дальше →
Total votes 16: ↑15 and ↓1+14
Comments17

Давайте поговорим о ведении логов

Reading time5 min
Views27K
Этот пост вдохновлен темой в форуме Go Forum, начатой Nate Finch. Этот пост сконцентрирован на языке Go, но если пройти мимо этого, я думаю, идеи представленные тут широко применимы.

Почему нет любви?


Пакет log в Go не имеет уровней для логов, вы можете сами вручную добавить приставки DEBUG, INFO, WARN, и ERROR. Также logger тип в Go не имеет возможности включить или выключить эти уровни отдельно для выбранных пакетов. Для сравнения давайте глянем на несколько его замен от сторонних разработчиков.

image

glog от Google имеет уровни:

  • Info
  • Warning
  • Error
  • Fatal (завершает программу)

Посмотрим на другую библиотеку, loggo, разработанную для Juju, в ней доступны уровни:

  • Trace
  • Debug
  • Info
  • Warning
  • Error
  • Critical

Loggo также имеет возможность задать уровень детализации лога для нужных пакетов по отдельности.

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

Фактически их происхождение можно проследить до syslog(3), возможно, даже раньше. И я думаю, что они не правы.

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

Я утверждаю, что для успешных пакетов логов требуется гораздо меньше возможностей и, конечно, меньше уровней.
Читать дальше →
Total votes 26: ↑13 and ↓130
Comments59

Облачное хранилище Yunpan 360 будет закрыто в 2017 году

Reading time1 min
Views42K
Yunpan 360 — облачное хранилище предоставлявшее пользователям 100Тб места на облачном диске в самом начале своей работы. Постепенно новым пользователям стали давать только 36Тб. На сегодня это 3,6Тб. Это было очень привлекательно иметь такое хранилище.
Но все когда то заканчивается...
Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments95

Обновление VirtualTreeView 5.01

Reading time1 min
Views15K
VirtualTreeViewVirtualTreeView — это замечательный бесплатный компонент для вывода деревьев, списков и таблиц.
Компонент позволяет настраивать вывод данных практически как угодно — вы ограничены только задачей и фантазией.

Разработчики MySQL Query Browser for Windows,The Bat!, Smart Inspect и многих других продуктов используют его.
Компонент отличается высокой скоростью работы с узлами и широкими возможностями по настройке оформления, поддерживает Unicode.

Обновление 5.01 вышло 3 дня назад, теперь VirtualTreeView поддерживает:
  • Delphi XE3
  • C++ Builder XE2!

Полный список изменений смотрите под катом.
Читать дальше →
Total votes 18: ↑10 and ↓8+2
Comments8

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

Reading time5 min
Views859K
Золотой Остап и его стулВопрос о столах поднимался несколько раз (раз, два).

Однако, на чем же мы сидим перед столом?

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

Все мы работаем с компьютером и порой не замечаем, на чем же мы сидим.

Оказывается наши санитарные правила и нормы (СанПиН 2.2.2/2.4.1340-03) достаточно хорошо описывают удобный эргономичный стул для работы взрослых за компьютером!

А какой стул правильный?
Читать дальше →
Total votes 134: ↑125 and ↓9+116
Comments309

Долгожданное обновление компонента Virtual Treeview V5.0.0 RC1

Reading time1 min
Views9.1K
Разные вариант отображения содержимого в Virtual TreeviewМногие Delphi разработчики знают и используют этот замечательный бесплатный компонент для вывода деревьев, списков и таблиц.
Пользователи The Bat! видят его ежедневно, просматривая списки писем.
Компонент отличается высокой скоростью работы с узлами и широкими возможностями по настройке оформления, поддерживает Unicode.

Последняя версия компонента 4.8.7 вышла в октябре 2010 года, и надежды на обновления были слабыми.
Но, все таки, обновление вышло!
Пользователи Delphi XE2 теперь будут рады, теперь можно радовать и пользователей 64-битных систем.
Читать дальше →
Total votes 46: ↑30 and ↓16+14
Comments40

Тысячи телевизоров Samsung серии D6x00 содержат дефект — не могут отображать 3D в Full HD

Reading time6 min
Views38K

3D S.O.S.: 3D позор Samsung


2D версия
Как видно из названия — это очень большая ошибка в модельном ряду LED-телевизоров Samsung D6xxx.

Мы проверили все возможные источники сигнала: Playstation 3, Samsung BDP D6500, USB SBS MKV, USB MPO-файл, — и каждый раз результат был тот же! Телевизор не хочет показывать FULL HD 3D-изображения!
3D версия
Владельцы Samsung D6xxx могут сами проверить свой телевизор на наличие этого дефекта. Здесь мы разместили для вас несколько фотографий для тестов.

Скачайте 2D и 3D тестовые изображения Full HD (1080) и Half HD (720) px, и посмотрите сами…
Ссылки под катом.
В конце перевода я добавил свою переписку с Samsung по этой проблеме.

Данная проблема выявлена и в России
myhdplayer.ru/samsung-snimaet-logotip-full-hd-3d.html
market.yandex.ru/forums/?modelid=7155057&hid=90639&p_n=5
Читать дальше →
Total votes 8: ↑4 and ↓40
Comments3

Подробнее об атрибутах в Delphi 2010. Пример — проверка данных

Reading time4 min
Views6.6K
МышаВ моей предыдущей статье Кратко об атрибутах в Delphi 2010, я показал основы связанные с созданием, применением и опросом атрибутов. Однако, я не привел пример, для чего вы могли бы их использовать.

Вероятно, наиболее распространенным является пример для персистентности, и, действительно, кто-то опубликовал подобный пример на сайте Wings of Wind. Я хотел бы показать другое их применение — для проверки данных (Validation).
Читать дальше →
Total votes 16: ↑10 and ↓6+4
Comments43

Постоянно открывающееся окно CPU с остановкой на ntdll.dbgbreakpoint

Reading time1 min
Views2.8K
Delphi ntdll.dbgbreakpointС недавнего времени почему-то при запуске приложения стало постоянно открываться окно CPU и первая точка остановки ntdll.dbgbreakpoint. Непредвиденные точки останова повторяются часто и необходимо вручную продолжать выполнение. Это говорит о каких-то неполадках или отсутствии информации для отладки в приложении.

Однако, в приложении ровным счетом ничего не изменилось, настройки Delphi не менялись. Откуда же тогда неизвестная информация? Как вернуться к нормальной работе?
Читать дальше →
Total votes 16: ↑8 and ↓80
Comments14

Поддержка рефакторинга атрибутов в Delphi 2010

Reading time1 min
Views1.6K
РефакторингЯ упоминал ранее, что в этом выпуске большая часть работы была отведена для дополнительных функциональных возможностей и их улучшения. В результате, IDE продолжает меня приятно удивлять. Я пробую делать что-то, даже не задумываясь о том, а будет ли это работать вообще, и нахожу что оно не просто работает, а работает даже лучше, чем я мог себе представить.

Один из примеров касается поддержки рефакторинга атрибутов.
Читать дальше →
Total votes 20: ↑11 and ↓9+2
Comments17

Преобразование ссылки на интерфейс для реализации класса в Delphi 2010

Reading time2 min
Views5.3K
Не все нововведения в Delphi 2010 большие и заметные. Команда потратила массу времени реализуя множество дополнительных функциональных возможностей, исправлений и улучшений. Некоторые из них могут показаться незначительными по отдельности, но они не только в целом окзывают существенное влияние, но и значительно добавляют гармоничности продукту.

Одна из возможностей Delphi 2010, которая, как мне кажется, породит массу споров — это возможность привести интерфейсную ссылку назад к типу класса, реализующего этот интерфейс.
Читать дальше →
Total votes 25: ↑15 and ↓10+5
Comments34

Кратко о RTTI и атрибутах в Delphi 2010

Reading time3 min
Views15K
RTTI (Runtime Type Information) было тщательно переработано в Delphi 2010.
RTTI является центральным элементом, на котором написано Delphi IDE, он существует со времен первого выпуска, однако я слышал от некоторых людей на протяжении многих лет, что они попытались использовать RTTI и нашли это слишком сложным и замысловатым, особенно по сравнению с Reflection API в Java и .NET. Вот это настоящий позор, поскольку возможность писать код для запроса подробной информации о других объектах, не зная заранее их типа, это действительно мощная возможность.
Читать дальше →
Total votes 48: ↑28 and ↓20+8
Comments380

Обобщенные интерфейсы в Delphi

Reading time3 min
Views6.8K
Первод стаьи от Malcolm Groves, «Generic Interfaces in Delphi».

imageБольшинство примеров использования дженериков в Delphi используют класс с дженерик-типом. Однако, работая над своим проектом, я решил, что мне нужен интерфейс с дженерик-типом.

В проекте используется встроенный механизм издатель-подписчик. Я захотел чтобы подписчик имел для каждого типа события отдельный метод Receive, а не отдельный метод с огромным case-выражением, выбирающим действие для каждого типа события. Также я не хотел определять интерфейс для каждого типа события. Мне был нужен дженерик интерфейс подписчика, который получает тип события, как параметр.

Однако, я понятия не имел, могу ли я определить дженерик интерфейс, не говоря уже о реализации. Даже если предположить, что я могу сделать это, сможет ли Delphi выбрать правильный метод Receive для вызова? Есть только один способ узнать…
Читать дальше →
Total votes 10: ↑7 and ↓3+4
Comments0

Многоуровневое дерево с маркерами, сохраняющее состояние (HTML, CSS, jQuery, Cookies)

Reading time6 min
Views19K
Продолжается развитие темы о многоуровневом дереве с маркерами. Многоуровневое дерево с сохранением состояния узлов
Теперь дерево выросло и окрепло, стало взрослее и помнит выбранный узел и состояние кажого узла в отдельности.
Страницу можно перезагружать, а дерево все равно будет помнить все что вы открыли и выбрали!

Читать дальше →
Total votes 38: ↑36 and ↓2+34
Comments48

Многоуровневое дерево с маркерами (HTML, CSS, jQuery). Запоминаем выбранный узел

Reading time5 min
Views6.2K
Дерево помнит выбранный узел по urlЭто продолжение темы про дерево. Хочу его довести до ранга «готов к внедрению». Потому повозился с JavaScript и сделал запоминание выбранного узла на основе адреса ссылки.
Если ссылка вложена в поддерево, дерево развернется до её уровня и, если у неё самой есть поддерево — оно тоже будет развернуто.

JavaScript сделал как смог, т.к. давно не использовал. Прошу помощи в доработке и оптимизации.
Читать дальше →
Total votes 22: ↑18 and ↓4+14
Comments18

Многоуровневое дерево с маркерами (HTML, CSS). Продолжение с jQuery

Reading time7 min
Views41K
Посмотреть в работе многоуровневое дерево с маркерами.В продолжение темы про дерево немного переделал код и подключил jQuery. Теперь дерево живое, узлы разворачиваются, как этого многие ожидают видя подобное дерево.
Теперь оформление дерева делает скрипт — сам расставляет маркеры для элементов с вложенными узлами.
Благодаря использованию скрипта HTML стал проще.

UPD 05.04.2009: обновлены скрипты, есть несколько вариантов скриптов.
UPD 09.04.2009: продолжение
Читать дальше →
Total votes 50: ↑47 and ↓3+44
Comments44
1

Information

Rating
211-th
Location
Россия
Date of birth
Registered
Activity

Specialization

Backend Developer, Site Reliability Engineer
Senior
SRE
Monitoring
GitLab
Golang
PostgreSQL
Redis