Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥1
Зависит от нескольких ключевых факторов, включая требования бизнеса, технические ограничения, нормативные требования и тип метрик.
Анализ производительности: Для анализа производительности системы за длительные периоды может потребоваться хранение метрик за несколько месяцев или лет. Исторические данные: В некоторых случаях необходимо хранить исторические данные для сравнения и анализа долгосрочных тенденций.
Дисковое пространство: Доступное дисковое пространство напрямую влияет на количество данных, которые можно хранить. Производительность системы: Увеличение объема данных может снижать производительность системы мониторинга.
Соблюдение законов и регламентов: В некоторых отраслях существуют требования к хранению данных, включая метрики, за определенные периоды.
Критические метрики: Метрики, важные для безопасности и стабильности системы, могут храниться дольше. Метрики производительности: Метрики производительности могут храниться короткий период для оперативного анализа и устранения проблем.
1-2 месяца: Для оперативного мониторинга и анализа текущих событий и инцидентов.
3-6 месяцев: Для анализа тенденций и выявления закономерностей.
1-2 года: Для соответствия нормативным требованиям и долгосрочного анализа производительности.
Позволяет настроить срок хранения данных с помощью параметра
--storage.tsdb.retention.time
.Настройка срока хранения метрик
prometheus --storage.tsdb.retention.time=90d
Позволяет управлять временем хранения данных с помощью политики хранения (Retention Policy).
CREATE RETENTION POLICY "three_months" ON "mydb" DURATION 90d REPLICATION 1 DEFAULT
ALTER RETENTION POLICY "three_months" ON "mydb" DURATION 90d REPLICATION 1
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥7
Эффективный мониторинг является критически важным для поддержания стабильности, производительности и безопасности систем.
Настройка алертинга для проактивного выявления проблем до их воздействия на пользователей. Использование пороговых значений и трендов для настройки алертов. Регулярная проверка и обновление алертов на основе опыта и изменяющихся условий.
Консолидация логов, метрик и событий в одной системе для удобного анализа. Использование инструментов, таких как ELK Stack, Prometheus, и Grafana для сбора и анализа данных. Централизация данных для упрощения корреляции и анализа.
Мониторинг всех уровней системы: инфраструктуры, приложений, сетей и пользовательского опыта. Инструменты мониторинга инфраструктуры: Prometheus, Nagios. Мониторинг приложений: APM (Application Performance Monitoring) инструменты, такие как New Relic, Datadog. Мониторинг пользовательского опыта: Real User Monitoring (RUM) и Synthetic Monitoring.
Отслеживание ключевых метрик производительности и доступности. CPU, память, диск, сеть: сбор и анализ системных метрик. Время отклика и количество ошибок: метрики приложений. Среднее время безотказной работы (MTTF) и среднее время восстановления (MTTR).
Создание информативных и понятных дашбордов для анализа данных. Использование Grafana для визуализации метрик и создания дашбордов. Настройка дашбордов для различных аудиторий: разработчики, операционные команды, менеджмент.
Обеспечение безопасности данных мониторинга через аутентификацию и авторизацию. Настройка ролевой модели доступа к данным мониторинга. Использование защищенных каналов связи (TLS/SSL).
Поддержка актуальной документации по настройкам мониторинга и обучение команды. Документация конфигураций, схем и процессов мониторинга. Регулярное обучение команды по инструментам и методам мониторинга.
Использование автоматизации для настройки и поддержания мониторинга. Автоматизация развертывания агентов мониторинга с помощью Ansible, Terraform и других инструментов. Интеграция с CI/CD для мониторинга развертываний и выпуска новых версий.
Регулярная оценка и улучшение системы мониторинга. Проведение регулярных аудитов конфигураций и эффективности мониторинга. Внедрение новых инструментов и методов на основе обратной связи и новых технологий.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥5❤2
Является важной частью мониторинга и управления инфраструктурой. Уведомления позволяют оперативно реагировать на проблемы и минимизировать время простоя. Настройка уведомлений зависит от нескольких факторов, таких как критичность сервиса, тип метрик, предпочитаемые каналы уведомлений и инструменты мониторинга.
Критически важные сервисы требуют более быстрых и агрессивных уведомлений. Менее важные сервисы могут иметь менее строгие правила уведомлений.
Производственные метрики: CPU, память, диск, сеть. Метрики приложений: время отклика, количество ошибок, производительность. Пользовательский опыт: время загрузки страницы, количество успешных транзакций.
SMS
Мессенджеры (Slack, Microsoft Teams)
Системы управления инцидентами (PagerDuty, OpsGenie)
Prometheus + Alertmanager
Grafana
Zabbix
Создайте или отредактируйте файл
alerts.yml
groups:
- name: example-alerts
rules:
- alert: HighCPUUsage
expr: avg_over_time(node_cpu_seconds_total{mode="idle"}[5m]) < 20
for: 2m
labels:
severity: critical
annotations:
summary: "High CPU usage detected"
description: "CPU usage is above 80% for more than 2 minutes"
Добавьте конфигурацию в
prometheus.yml
rule_files:
- "alerts.yml"
Создайте или отредактируйте файл
alertmanager.yml
global:
smtp_smarthost: 'smtp.example.com:587'
smtp_from: 'alertmanager@example.com'
route:
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: 'team@example.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'instance']
Запустите Alertmanager
./alertmanager --config.file=alertmanager.yml
Добавьте Alertmanager в конфигурацию Prometheus
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
Перейдите в раздел "Alerting" -> "Contact points" и создайте новую контактную точку. Укажите каналы уведомлений, такие как Email, Slack, PagerDuty и другие.
Перейдите в раздел "Alerting" -> "Notification policies" и создайте новую политику уведомлений. Настройте условия и укажите контактные точки.
Перейдите в раздел "Administration" -> "Media types" и создайте новый медиатип (например, Email или SMS).
Перейдите в раздел "Administration" -> "Users" и создайте пользователей. Настройте медиатипы для каждого пользователя и укажите, когда и как отправлять уведомления.
Ставь 👍 и забирай 📚 Базу знани
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3
Для настройки уведомлений в изолированной сети без доступа к интернету используйте локальные инструменты и системы. Основные методы включают локальные почтовые серверы, мессенджеры и системы управления инцидентами.
sudo apt update
sudo apt install postfix
Отредактируйте
/etc/postfix/main.cf
myhostname = local.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = all
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
relay_domains = $mydestination
sudo systemctl restart postfix
echo "Test email" | mail -s "Test Subject" user@example.com
Следуйте [документации](https://docs.mattermost.com/install/self-managed-install.html).
Создайте каналы и пользователей.
Используйте веб-хуки Mattermost для уведомлений.
Следуйте [документации](https://www.zabbix.com/download).
Настройте хосты, триггеры и действия.
Медиатипы: Настройте Email и SMS. Пользователи: Создайте пользователей и уведомления.
wget https://github.com/prometheus/prometheus/releases/download/v2.26.0/prometheus-2.26.0.linux-amd64.tar.gz
tar xvf prometheus-2.26.0.linux-amd64.tar.gz
cd prometheus-2.26.0.linux-amd64
./prometheus --config.file=prometheus.yml
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
tar xvf alertmanager-0.21.0.linux-amd64.tar.gz
cd alertmanager-0.21.0.linux-amd64
./alertmanager --config.file=alertmanager.yml
groups:
- name: example-alerts
rules:
- alert: HighCPUUsage
expr: avg_over_time(node_cpu_seconds_total{mode="idle"}[5m]) < 20
for: 2m
labels:
severity: critical
annotations:
summary: "High CPU usage detected"
description: "CPU usage is above 80% for more than 2 minutes"
global:
smtp_smarthost: 'localhost:25'
smtp_from: 'alertmanager@local.example.com'
route:
receiver: 'email-notifications'
receivers:
- name: 'email-notifications'
email_configs:
- to: 'admin@local.example.com'
send_resolved: true
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Для того чтобы уведомления были достоверными и надежными, необходимо учитывать несколько важных аспектов.
Правильно настроенные правила алертинга помогают избежать ложных срабатываний и пропусков важных событий.Определите четкие пороговые значения для метрик. Настройте правила так, чтобы они учитывали контекст и временные интервалы (например, CPU usage > 80% в течение 5 минут). Используйте тренды и аномалии вместо статических порогов для более точного алертинга.
Объединение нескольких метрик и событий для повышения точности алертов. Настройте алерты, которые срабатывают только при наличии нескольких условий. Используйте системы, такие как Prometheus и Alertmanager, для сложной логики алертинга.
Использование дашбордов и графиков для визуализации метрик и проверки правильности алертов. Настройте дашборды в Grafana или Kibana для постоянного мониторинга метрик. Регулярно проверяйте данные на предмет аномалий и соответствия реальной картине.
Периодическое тестирование системы алертинга для проверки ее работоспособности. Вручную вызывайте условия, при которых должны сработать алерты. Настройте тестовые сценарии для автоматической проверки системы алертинга.
Убедитесь, что системы уведомлений настроены правильно и доставляют сообщения своевременно. Используйте надежные каналы уведомлений (например, локальный почтовый сервер, локальные мессенджеры). Настройте резервные каналы уведомлений на случай отказа основного канала.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Она использует механизм, известный как OOM Killer (убийца процессов при нехватке памяти), для завершения процессов с целью освобождения памяти. Выбор процесса для завершения базируется на ряде критериев, чтобы минимизировать влияние на работу системы.
Каждому процессу присваиваются очки OOM, которые рассчитываются на основе нескольких факторов, таких как: Объем памяти, используемой процессом. Приоритет процесса. Важность процесса для системы (например, системные демоны имеют более низкие очки).
Основной фактор при расчете очков - это объем потребляемой процессом памяти. Чем больше памяти потребляет процесс, тем выше его OOM Score. Операционная система также учитывает приоритет процесса (nice value) и некоторые другие параметры.
Процесс с наибольшим OOM Score считается наименее критичным для системы и завершается первым.
Процесс A использует 1 ГБ памяти.
Процесс B использует 2 ГБ памяти.
Процесс C использует 500 МБ памяти, но это критический системный процесс.
Процесс A: 300
Процесс B: 600
Процесс C: 100 (низкий, так как процесс критический)
Администраторы могут влиять на работу OOM Killer, настраивая параметры OOM Score для конкретных процессов с помощью файлов в каталоге
/proc
. Например, для изменения приоритета процесса:echo -1000 > /proc/<PID>/oom_score_adj
При срабатывании OOM Killer соответствующие сообщения записываются в системный журнал (обычно
/var/log/syslog
или /var/log/messages
), что позволяет администраторам анализировать причины и предпринимать меры по предотвращению в будущем.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
Это инструменты для управления инфраструктурой как кодом (IaC), которые помогают автоматизировать развертывание, управление и масштабирование ресурсов в облачных и локальных средах. Оба инструмента имеют свои сильные и слабые стороны. Выбор между ними зависит от конкретных требований и контекста использования.
Плюсы
Terraform — это один из самых популярных инструментов IaC с большим сообществом и обширной документацией. Множество готовых модулей и примеров, что облегчает начало работы.
Terraform поддерживает широкий спектр облачных провайдеров и сервисов (AWS, Azure, Google Cloud, и т.д.). Разработчики активно добавляют новые провайдеры и обновляют существующие.
Использование HashiCorp Configuration Language (HCL) для написания инфраструктурного кода. Поддержка сложных сценариев развертывания с использованием модулей, переменных и терраформ-рабочих областей.
Минусы
Некоторые функции доступны только в коммерческой версии Terraform Enterprise. Переход на платные функции может быть дорогостоящим для небольших команд.
В некоторых случаях могут возникнуть проблемы с производительностью при управлении очень большими инфраструктурами.
OpenTofu — это форк Terraform, который возник в ответ на изменения в лицензионной политике HashiCorp.
Плюсы
OpenTofu полностью открыт и не требует коммерческих лицензий для использования всех функций. Активное сообщество, которое стремится сохранить инструмент полностью свободным.
OpenTofu сохраняет совместимость с конфигурациями и модулями Terraform, что позволяет легко перейти с Terraform на OpenTofu.
Открытое сообщество разработчиков может быстрее внедрять новые функции и исправления.
Минусы
Хотя OpenTofu быстро растет, его сообщество и экосистема пока меньше, чем у Terraform. Ограниченное количество документации и примеров по сравнению с Terraform.
Хотя OpenTofu совместим с Terraform на текущий момент, в будущем могут возникнуть различия в функциональности и поддержке провайдеров.
Если вам нужна стабильность и зрелость инструмента с широким сообществом и обширной документацией. Если ваша инфраструктура уже использует Terraform и вы не хотите менять инструмент. Если вам нужны коммерческие функции Terraform Enterprise для управления и обеспечения безопасности инфраструктуры.
Если вы хотите использовать полностью открытый инструмент без коммерческих ограничений. Если вас беспокоят изменения в лицензионной политике HashiCorp и вы хотите избежать потенциальных проблем в будущем. Если вы хотите поддержать открытое сообщество и активно участвовать в развитии инструмента.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
В Terraform,
for_each
и count
используются для создания нескольких экземпляров ресурсов на основе списка значений или карты (map). Выбор между ними зависит от структуры данных и конкретного сценария использования.count
используется для создания фиксированного количества экземпляров ресурса на основе числового значения. Это простой способ создания ресурсов, если количество экземпляров известно заранее и не зависит от ключей или других атрибутов.Сценарий: Создание трех экземпляров виртуальных машин с одинаковой конфигурацией.
resource "aws_instance" "example" {
count = 3
ami = "ami-0c55b159cbfafe1f0"
instance_type = "t2.micro"
tags = {
Name = "example-instance-${count.index}"
}
}
for_each
используется для создания ресурсов на основе ключей карты (map) или множества (set). Это позволяет более гибко управлять созданием ресурсов и ссылаться на конкретные экземпляры по их ключам.Сценарий: Создание экземпляров виртуальных машин с разными конфигурациями на основе карты значений.
locals {
instances = {
instance1 = { ami = "ami-0c55b159cbfafe1f0", instance_type = "t2.micro" }
instance2 = { ami = "ami-0c55b159cbfafe1f0", instance_type = "t2.small" }
instance3 = { ami = "ami-0c55b159cbfafe1f0", instance_type = "t2.medium" }
}
}
resource "aws_instance" "example" {
for_each = local.instances
ami = each.value.ami
instance_type = each.value.instance_type
tags = {
Name = each.key
}
}
Если количество экземпляров известно заранее и одинаково для всех экземпляров.
Когда все экземпляры имеют одинаковую конфигурацию или различия минимальны.
Создание трех одинаковых экземпляров S3 бакетов.
resource "aws_s3_bucket" "example" {
count = 3
bucket = "example-bucket-${count.index}"
}
Если количество экземпляров и их конфигурация зависят от динамически определяемых данных.
Когда нужно использовать ключи для идентификации и управления экземплярами ресурсов.
Создание IAM пользователей с различными именами и политиками.
locals {
users = {
alice = "arn:aws:iam::aws:policy/AdministratorAccess"
bob = "arn:aws:iam::aws:policy/ReadOnlyAccess"
}
}
resource "aws_iam_user" "example" {
for_each = local.users
name = each.key
path = "/users/"
}
resource "aws_iam_user_policy_attachment" "example" {
for_each = local.users
user = aws_iam_user.example[each.key].name
policy_arn = each.value
}
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15❤1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥3
После создания нового репозитория, будь то локальный или удаленный, необходимо выполнить несколько шагов для начала полноценной работы с ним. Эти шаги включают инициализацию репозитория, настройку удаленного репозитория, добавление файлов, коммит и настройку синхронизации с удаленным репозиторием.
Перейдите на GitHub и войдите в свой аккаунт. Нажмите на кнопку "New" для создания нового репозитория. Введите имя репозитория, описание (опционально), выберите публичный или приватный доступ, инициализируйте с README (если нужно). Нажмите "Create repository".
Если репозиторий уже существует на GitHub
git clone https://github.com/yourusername/your-repository.git
cd your-repository
Если вы создаете новый локальный репозиторий
mkdir your-repository
cd your-repository
git init
Создайте или добавьте файлы
echo "# Your Repository" > README.md
Добавьте файлы в индекс
git add README.md
Сделайте первый коммит
git commit -m "Initial commit"
Если вы инициализировали локальный репозиторий, вам нужно настроить удаленный репозиторий.
git remote add origin https://github.com/yourusername/your-repository.git
Отправьте ваши изменения в удаленный репозиторий
git push -u origin master
Для разработки новых функций или исправлений багов рекомендуется создавать отдельные ветки
git checkout -b feature-branch
После завершения работы в ветке создайте Pull Request на GitHub для обзора и слияния.
Добавьте файл
.gitignore
для исключения ненужных файлов из коммитов. echo "node_modules/" > .gitignore
git add .gitignore
git commit -m "Add .gitignore"
Подключите сервисы Continuous Integration/Continuous Deployment, такие как GitHub Actions, Travis CI или Jenkins, для автоматизации тестирования и развертывания.
# Пример файла .github/workflows/ci.yml для GitHub Actions
name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up Node.js
uses: actions/setup-node@v2
with:
node-version: '14'
- run: npm install
- run: npm test
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2
Redis часто используется вместе с MongoDB по нескольким причинам, связанным с их совместимостью, функциональными возможностями и типами данных, которые они поддерживают. Ниже приведены основные причины, почему эта комбинация предпочтительнее в некоторых сценариях.
MongoDB — это документно-ориентированная база данных, оптимизированная для хранения и управления JSON-подобными документами. Она хорошо подходит для хранения сложных данных и поддерживает гибкую схему.
Redis — это база данных в памяти, которая используется для высокопроизводительного кэширования и обработки данных. Она поддерживает различные структуры данных, такие как строки, списки, множества и хэши. Эти два инструмента дополняют друг друга, предлагая сочетание долговременного хранения данных (MongoDB) и быстрого доступа к данным (Redis).
PostgreSQL — это реляционная база данных с расширенными возможностями, такими как поддержка транзакций, строгая схема и ACID-соответствие. Она хорошо подходит для сложных запросов и аналитики.
Гибкая схема MongoDB позволяет легко изменять структуру данных без сложных миграций. MongoDB отлично работает с JSON-документами, что делает его удобным для хранения полуструктурированных данных.
Redis поддерживает различные структуры данных, такие как списки, множества, сортированные множества и хэши, что делает его идеальным для использования в качестве кэша и обработки данных в реальном времени.
Redis работает в памяти, что обеспечивает очень высокую скорость чтения и записи. Это делает его идеальным для кэширования и временного хранения данных, которые требуют быстрого доступа. Redis может обрабатывать большое количество операций в секунду, что делает его подходящим для высоконагруженных систем.
MongoDB масштабируется горизонтально, что позволяет эффективно управлять большими объемами данных. Поддержка шардинга в MongoDB позволяет распределять данные по нескольким узлам, улучшая производительность и отказоустойчивость.
Redis часто используется для кэширования результатов запросов из MongoDB. Это снижает нагрузку на MongoDB и улучшает производительность системы. Redis может использоваться для хранения сессий пользователей, очередей задач и других временных данных, которые требуют быстрого доступа и обновления.
Использование Redis для кэширования часто запрашиваемых данных из MongoDB. Например, результаты сложных запросов или часто используемые документы могут храниться в Redis для быстрого доступа.
import redis
from pymongo import MongoClient
# Подключение к Redis и MongoDB
redis_client = redis.StrictRedis(host='localhost', port=6379, db=0)
mongo_client = MongoClient('localhost', 27017)
db = mongo_client['example_db']
collection = db['example_collection']
# Получение данных из Redis
data = redis_client.get('key')
if not data:
# Если данных нет в Redis, получить их из MongoDB
data = collection.find_one({'_id': 'key'})
# Сохранить данные в Redis для кэширования
redis_client.set('key', data)
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Протоколы: TCP (надежная передача данных), UDP (быстрая и ненадёжная), HTTP/HTTPS (веб-протоколы), FTP (передача файлов), SMTP/IMAP/POP3 (почтовые протоколы), WebSocket (двусторонняя связь) и DNS (разрешение имён).
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6