Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
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
Это два различных подхода в разработке и доставке программного обеспечения, которые имеют разные цели и методы, но могут взаимодополнять друг друга. Давайте рассмотрим основные различия и связи между ними.
Увеличение гибкости и адаптивности разработки программного обеспечения.
Разработка проходит в коротких циклах (итерациях), что позволяет регулярно представлять работающее программное обеспечение.
Регулярные встречи (например, ежедневные стендапы, спринт-ревью) для получения обратной связи от команды и заинтересованных сторон.
Команды, состоящие из разработчиков, тестировщиков, аналитиков и других специалистов, работают вместе над проектом.
Постоянное взаимодействие с клиентами для уточнения требований и проверки соответствия продукта их ожиданиям.
Фреймворки: Scrum, Kanban, XP (Extreme Programming).
Увеличение скорости и качества доставки программного обеспечения через автоматизацию и улучшение сотрудничества между разработчиками и операционными командами.
Автоматизация сборки, тестирования и развертывания кода, чтобы изменения могли быстро и надежно попасть в рабочую среду.
Использование кода для управления и автоматизации инфраструктуры, что делает процессы повторяемыми и предсказуемыми.
Постоянное отслеживание состояния приложений и инфраструктуры для быстрого обнаружения и устранения проблем.
Улучшение взаимодействия между разработчиками и операционными инженерами через общие инструменты и процессы.
Инструменты: Jenkins, Docker, Kubernetes, Ansible, Terraform, Prometheus, Grafana.
Agile: Сфокусирован на процессе разработки и управлении проектами, улучшая гибкость и адаптивность команды разработки.
DevOps: Сфокусирован на процессе доставки и эксплуатации, улучшая автоматизацию и сотрудничество между разработчиками и операционными командами.
Agile: Включает кросс-функциональные команды, которые работают вместе над созданием программного обеспечения.
DevOps: Включает команды разработчиков и операций, которые совместно работают над автоматизацией и улучшением процессов развертывания и эксплуатации.
Agile: Методы Scrum, Kanban и другие Agile-практики, которые улучшают процесс управления проектами.
DevOps: Инструменты и практики для автоматизации развертывания, мониторинга и управления инфраструктурой.
Помогает улучшить процесс разработки, делая его более гибким и отзывчивым к изменениям.
Дополняет Agile, автоматизируя развертывание и эксплуатацию программного обеспечения, что позволяет быстрее доставлять изменения пользователям.
Может использовать Scrum для управления спринтами и задачами.
Могут быть использованы для автоматизации CI/CD пайплайнов, чтобы каждая итерация разработки могла быть быстро и надежно развернута на серверы.
Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Команда
kill
в Linux может отправлять разные сигналы процессам, включая как SIGTERM
, так и SIGKILL
. Основное различие между ними заключается в том, как они обрабатываются процессами.Это сигнал завершения, который может быть перехвачен и обработан процессом. Процесс может выполнить очистку (освободить ресурсы, сохранить состояние и т.д.) перед завершением. По умолчанию команда
kill
отправляет именно этот сигнал. Пример команды: kill <PID>
, где <PID>
- идентификатор процесса.Это сигнал немедленного завершения, который не может быть перехвачен процессом. Процесс завершается мгновенно без выполнения какой-либо очистки. Используется, когда процесс не реагирует на другие сигналы. Пример команды:
kill -9 <PID>
.Когда вы используете команду
kill
без указания сигнала, по умолчанию отправляется сигнал SIGTERM
.kill <PID>
Для отправки сигнала
SIGKILL
используется флаг -9
.kill -9 <PID>
Команда:
kill 1234
Процесс с идентификатором 1234 получит сигнал
SIGTERM
и, если он запрограммирован для обработки этого сигнала, может выполнить завершение с очисткой.Команда:
kill -9 1234
Процесс с идентификатором 1234 будет немедленно завершен без возможности выполнения какой-либо очистки.
Используйте, когда хотите корректно завершить процесс, предоставив ему возможность освободить ресурсы и завершить работу корректно.
Используйте в случае, если процесс не отвечает на
SIGTERM
или находится в зависшем состоянии.Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Anonymous Quiz
73%
Тип службы, доступный только внутри кластера
8%
Инструмент для управления конфигурацией
7%
Система мониторинга сети
12%
Инструмент для автоматического масштабирования