Какие инструменты автоматизации вы знаете для рутинных/ежедневных задач? Как вы их используете для скриптинга на стороне сервера?
Подсказки:
- Использование LLMs или GitHub Copilot для генерации кода
- Подумайте о консольных утилитах, которые вы использовали для обработки текста или автоматизации повторяющихся задач.
- Используем ли языки оболочек, такие как bash?
- Инструменты, такие как grep, sed и awk, полезны для обработки текста, а Python предлагает более полные возможности автоматизации.
Выше ожиданий:
- Понимание шаблонов регулярных выражений (regular expressions) в различных инструментах
- Создание повторно используемых библиотек скриптов
- Реализация идемпотентной автоматизации
- Создание CI/CD пайплайнов с использованием этих инструментов и контейнеризация скриптов автоматизации.
CLI программы для обработки текста и автоматизации
grep
grep (Global Regular Expression Print) — мощный командный инструмент для поиска текста по шаблонам в файлах.
- Основное применение: Поиск и фильтрация текста на основе шаблонов.
- Общее применение: Анализ логов, нахождение специфических конфигураций в файлах, фильтрация вывода команд.
# Найти все вхождения "error" в логах приложения
grep "error" /var/log/application.log
# Рекурсивно найти в конфигурационных файлах определённое значение
grep -r "max_connections" /etc/
sed
sed (Stream Editor) позволяет выполнять базовые преобразования текста на входном потоке.
- Основное применение: Замена, удаление и вставка текста.
- Общее применение: Модификация конфигурационных файлов, пакетные замены текста.
# Заменить все вхождения 'old_server' на 'new_server' в конфигурационном файле
sed -i 's/old_server/new_server/g' config.conf
# Удалить все строки, содержащие "DEBUG", из файла логов
sed '/DEBUG/d' input.log > cleaned.log
awk
awk — язык обработки текста, предназначенный для извлечения данных и создания отчётов.
- Основное применение: Обработка текста по столбцам, извлечение данных.
- Общее применение: Парсинг логов, обработка данных, генерация отчётов.
# Вывести третий столбец файла CSV
awk -F, '{print $3}' data.csv
# Вычислить сумму чисел во втором столбце
awk '{sum += $2} END {print "Сумма:", sum}' data.txt
find
find — инструмент для поиска файлов и каталогов по различным критериям.
- Основное применение: Поиск файлов по имени, размеру, времени модификации и т. д.
- Общее применение: Операции очистки, массовые операции над файлами, соответствующими критериям.
# Найти и удалить файлы логов, старше 7 дней
find /var/log -name "*.log" -type f -mtime +7 -exec rm {} \;
# Найти большие файлы, которые могут занимать много места на диске
find / -type f -size +100M -exec ls -lh {} \;
xargs
xargs — инструмент, который строит и выполняет команды из стандартного ввода.
- Основное применение: Преобразование стандартного ввода в аргументы для команды.
- Общее применение: Массовые операции, распараллеливание задач.
# Найти все файлы .txt и обработать их с помощью пользовательского скрипта
find . -name "*.txt" | xargs -I{} ./process_file.sh {}
# Обработать файлы параллельно (по 4 за раз)
find . -name "*.log" | xargs -P 4 -I{} gzip {}
Языки сценариев оболочки
Bash
Bash (Bourne Again SHell) — стандартная оболочка для большинства дистрибутивов Linux и macOS.
- Основное применение: Автоматизация задач системного администрирования, последовательное выполнение команд.
- Общее применение: Скрипты запуска, процедуры резервного копирования, настройка окружения.
#!/bin/bash
# Простой скрипт резервного копирования
backup_dir="/backups/$(date +%Y%m%d)"
mkdir -p "$backup_dir"
tar -czf "$backup_dir/website_backup.tar.gz" /var/www/html
echo "Резервное копирование завершено в $(date)" >> /var/log/backups.log
PowerShell
PowerShell — платформа Microsoft для автоматизации задач и управления конфигурацией.
- Основное применение: Администрирование систем Windows, управление Azure.
- Общее применение: Управление Active Directory, автоматизация серверов Windows.
# Получить все остановленные службы и попробовать запустить их
Get-Service | Where-Object {$_.Status -eq "Stopped"} | ForEach-Object {
Write-Host "Запуск службы: $($_.Name)"
Start-Service $_.Name -ErrorAction SilentlyContinue
}
Языки программирования для автоматизации
Python
Python — высокоуровневый язык программирования, известный своей простотой и удобочитаемостью.
- Основное применение: Сложные задачи автоматизации, обработка данных, взаимодействие с API.
- Общее применение: Веб-скрепинг, мониторинг системы, автоматизация инфраструктуры.
- Ключевые библиотеки:
- Requests: HTTP-запросы и взаимодействие с API.
- Paramiko: Автоматизация SSH.
- Beautiful Soup: Веб-скрепинг и парсинг HTML.
- Pandas: Анализ и обработка данных.
# Простой скрипт для проверки доступности веб-сайта и отправки уведомлений
import requests
import smtplib
from email.message import EmailMessage
def check_website(url):
try:
response = requests.get(url, timeout=10)
return response.status_code == 200
except Exception as e:
return False
def send_alert(url):
msg = EmailMessage()
msg.set_content(f"Веб-сайт {url} недоступен!")
msg['Subject'] = 'Уведомление о недоступности веб-сайта'
msg['From'] = 'alerts@example.com'
msg['To'] = 'admin@example.com'
server = smtplib.SMTP('smtp.example.com', 587)
server.send_message(msg)
server.quit()
websites = ['https://example.com', 'https://example.org']
for site in websites:
if not check_website(site):
send_alert(site)
Инфраструктура как код (IaC) инструменты
Ansible
Ansible — инструмент без агентов для автоматизации, использующий YAML-файлы playbooks.
- Основное применение: Управление конфигурацией, развертывание приложений, оркестрация.
- Общее применение: Настройка серверов, развертывание приложений, соблюдение требований безопасности.
# Ansible playbook для установки и настройки Nginx
---
- name: Установить и настроить Nginx
hosts: webservers
become: yes
tasks:
- name: Установить пакет Nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Настроить сайт Nginx
template:
src: templates/default.conf.j2
dest: /etc/nginx/sites-available/default
notify: перезапустить nginx
handlers:
- name: перезапустить nginx
service:
name: nginx
state: restarted
Terraform
Terraform — инструмент IaC для безопасного и эффективного создания, изменения и управления инфраструктурой.
- Основное применение: Развертывание облачных ресурсов и инфраструктуры.
- Общее применение: Развертывание в нескольких облаках, унификация сред.
Cron
Cron — планировщик задач на основе времени в Unix-подобных операционных системах.
- Основное применение: Планирование повторяющихся задач.
- Общее применение: Регулярные резервные копии, ротация логов, периодическое обслуживание.
# Запустить скрипт резервного копирования каждый день в 2 часа ночи
0 2 * * * /usr/local/bin/backup.sh
# Проверять место на диске каждый час и отправлять email, если мало места
0 * * * * /usr/local/bin/check_disk_space.sh
Инструменты непрерывной интеграции и доставки (CI/CD)
Jenkins
Jenkins — сервер автоматизации с открытым исходным кодом.
- Основное применение: Сборка, тестирование и развертывание кода.
- Общее применение: Автоматическое тестирование, непрерывная доставка, интеграция с другими инструментами.
GitHub Actions
GitHub Actions — встроенное решение CI/CD от GitHub.
- Основное применение: Автоматизация рабочих процессов непосредственно из репозиториев GitHub.
- Общее применение: Тестирование кода, публикация пакетов, развертывание.
GitLab CI
GitLab CI — интегрированное решение CI/CD от GitLab.
- Основное применение: Автоматизация жизненного цикла разработки программного обеспечения.
- Общее применение: Тестирование, сборка и развертывание приложений.
Инструменты для разработки с использованием ИИ
GitHub Copilot
GitHub Copilot — ИИ-помощник программиста, предлагающий подсказки по коду.
- Основное применение: Генерация кода, создание шаблонного кода, изучение новых API.
- Общее применение: Ускорение разработки, поиск решений.
- Рекомендации:
- Проверять весь сгенерированный код на безопасность и правильность.
- Использовать для изучения шаблонов в незнакомых языках.
- Настраивать сгенерированный код в соответствии со стандартами проекта.
Большие языковые модели (LLM)
LLM, такие как ChatGPT, могут помочь в генерации кода и решении проблем.
- Основное применение: Генерация кода, помощь в отладке, учебные ресурсы.
- Общее применение: Создание скриптов, объяснение сложных концепций, предложение оптимизаций.
- Рекомендации:
- Проверять сгенерированный код с помощью тестирования.
- Использовать для начальных набросков, затем уточнять с помощью человеческой экспертизы.
- Предоставлять ясный контекст для лучших результатов.
Инструменты контейнеризации и оркестрации
Docker
Docker — платформа для разработки, распространения и запуска приложений в контейнерах.
- Основное применение: Создание переносимых, изолированных сред для приложений.
- Общее применение: Согласованные среды разработки, микросервисы, конвейеры CI/CD.
Kubernetes
Kubernetes — платформа оркестрации контейнеров для автоматизации развёртывания, масштабирования и управления.
- Основное применение: Управление контейнерными приложениями в масштабе.
- Общее применение: Услуги высокой доступности, автоматическое масштабирование, обнаружение услуг.