DevOps Portal | Linux
13.4K subscribers
868 photos
112 videos
10 files
882 links
Присоединяйтесь к нашему каналу и погрузитесь в мир DevOps

Связь: @devmangx

РКН: https://clck.ru/3P8kFH
Download Telegram
🐧 Три команды для работы с логами в Linux, которые я использую чаще всего

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

🟢Места хранения логов в Linux

Естественно, место, где будут храниться логи можно определить самостоятельно через конфигурационные файлы. Но мы остановимся на классическом варианте - системной папке:
/var/log/...


Внутри нее могут располагаться как отдельные файлы-логи (имеющие расширение log), так и директории с названиями сервисов внутри которых находятся логи. Есть, естественно, исключения. Например, Docker. У него логи запущенных контейнеров находятся в другом месте:

/var/lib/docker/containers/<id_контейнера>/<id_контейнера>-json.log


Опять-таки, повторюсь, что чаще всего местоположение логов, заданное разработчиками программы или сервиса указывается в конфигурационных файлах и может, при желании, меняться пользователем. Системные логи, чаще всего, хранятся в /var/log.

🟢 Какие виды логов бывают?

Расскажу, опять-таки, про классическую схему того, какие логи бывают.

access.log - содержат данные о доступе к серверу/ресурсу/приложению (например, успешные авторизации)

error.log - содержат данные об ошибках, возникающих при работе с серверами/ресурсами/приложениями.

🔤 <имя_сервиса>.log - содержат данные обо всех взаимодействиях с сервисом (доступ, ошибки, информация и пр.)

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

1️⃣ Команда cat для просмотра содержимого лога

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

cat /var/log/<имя_лога>.log


Удобно, когда лог небольшой, в обратном случае вывод может занять длительное время.

2️⃣ Команда tail -f для вывода содержимого лога в режиме реального времени

Напомню, что команда tail выводит по-умолчанию 10 последних строк содержимого файла. Но при использовании ключа -f в выхлоп будут попадать строки лога в режиме реального времени.

tail -f /var/log/<имя_лога>.log


Удобно запустить такую команду и начать тестирование сервиса или программы, чтобы сразу видеть влетающую информацию.

3️⃣ Команда echo -n > для зануления логов

Бывает так, что логи разрастаются до неимоверных размеров. Решается это настройкой так называемой ротации (про нее расскажу отдельно в следующий раз), но если лог разросся до размеров, которые нужно занулить здесь и сейчас, то указанная команда подойдет в самый раз:

echo -n > /var/log/<имя_лога>.log


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

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

Поддержите пост лайком, если он оказался полезным 🤝

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍403
Как вывести лог Docker за определенное время? 🗓

Чуть ранее мы говорили про работу с логами. В том сообщении я упоминал про Docker и то, что в его случае логи работы контейнеров хранятся в JSON-файлах и не совсем удобны для ознакомления. Особенно, если контейнер работает давно и за это время в логи нападало много всего и он весит под сотню мегабайт. Поэтому логичнее будет выводить содержимое лога Docker в отдельный файл и делать это за определенное время. Как? Расскажу ниже 👇

1️⃣ Вывод списка запущенных контейнеров

Начнем с основной команды, которая позволяет вывести список запущенных контейнеров и получить о них основную информацию:

docker ps

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

2️⃣ Вывод логов конкретного контейнера

Здесь есть два способа: менее удобный и совсем неудобный. Где какой решайте сами 🤷‍♂️ Первый способ заиметь доступ к логу контейнера указан был в сообщении про работу с логами, где я указывал место хранения логов Docker:

/var/lib/docker/containers/<id_контейнера>/<id_контейнера>-json.log

Но, как говорилось ранее, вы получаете лютый JSON, где вообще ничего непонятно. Второй способ - использовать команду для вывода логов конкретного контейнера:

docker logs <имя_или_ID_контейнера>

По сути, команда вываливает в терминал содержимое JSON-файла из способа №1. Что делать дальше с этой информацией решает каждый сам, кому-то может оно и поможет, ну а мы идем дальше...

3️⃣ Сохраняем логи за определенный период в отдельный файл

Совместим все, что узнали в пунктах выше и приправим ключом --since, который позволяет задать временной отрезок, с которого будет выведен лог. Вдобавок используя перенаправление вывода сохраним это все в отдельный файл, чтобы потом его изучить:

docker logs <имя_или_ID_контейнера> --since 60m > mydocker.log

Данный пример выведет содержимое лога контейнера Docker за последний час. Ну а что делать, если нужно вывести данные с прошлого месяца? Все просто!

docker logs <имя_или_ID_контейнера> --since YYYY-MM-DD > mydocker.log

Здесь YYYY - год (2023, например), MM - месяц (09) и DD - день (21). Порядок идет именно такой, так как все эти ваши европейцы и американцы, создавшие Linux и большую часть того, что связано с программированием, используют такой формат даты. Всю эту информацию перенаправляем в файл с расширением log, который потом можно использовать как душе угодно.

4️⃣ Добавляем временную метку в логи

Но даже после использования команды в п. 3 у вас получится файл, в котором все будет в кучу и не поймешь когда и во сколько какое событие, описанное в логе произошло. Поэтому нужно добавить временную метку, делается это при помощи ключа -t.

docker logs <имя_или_ID_контейнера> --since YYYY-MM-DD -t > mydocker.log

Вот теперь-то вы получите информативный лог о том, что происходило с вашим сервисом внутри контейнера!

Полученную в конце команду вы можете использовать вместе с сервисом Transfer.sh, чтобы без лишней головомойки делиться логами с кем нужно

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥41
Kubernetes-examples

Это репозиторий содержит множество примеров Kubernetes

👉 https://github.com/AdminTurnedDevOps/kubernetes-examples

👉 DevOps Portal | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
9👍3
🐧 Управление процессами в Linux: как держать систему под контролем

Разберем, как мониторить процессы, управлять их состоянием и настраивать автоматическое выполнение задач.

Процесс — это программа, запущенная в системе. У каждого процесса есть уникальный идентификатор (PID), родительский процесс (PPID) и состояние (активный, спящий и т. д.).

Основные действия с процессами:
🔹Мониторинг — отслеживание текущих процессов.
🔹Управление — остановка, возобновление, изменение приоритетов.
🔹Планирование — настройка задач для автоматического выполнения.

Команды для работы с процессами

1️⃣Мониторинг процессов

🟢 Просмотр активных процессов:
ps aux

Выводит список всех процессов с подробной информацией:
🔹USER — пользователь, запустивший процесс.
🔹PID — уникальный идентификатор процесса.
🔹%CPU / %MEM — использование процессора и памяти.
🔹COMMAND — название программы.

🟢 Интерактивный мониторинг:
top

Показывает процессы в реальном времени. Нажмите q, чтобы выйти.

🟢 Упрощенная альтернатива:
htop

Если не установлено, добавьте:
sudo apt install htop


2️⃣ Управление процессами

🟢 Завершение процесса:
kill <PID>

Например:
kill 1234

Чтобы принудительно завершить процесс:
kill -9 <PID>


🟢 Остановка и возобновление:

🔹Остановить процесс:
kill -STOP <PID>

🔹Возобновить процесс:
kill -CONT <PID>


🟢 Изменение приоритета процесса:

🔹Проверить приоритет (niceness):
ps -o pid,ni,cmd -p <PID>

🔹Изменить приоритет (чем ниже значение, тем выше приоритет):
renice -n 10 -p <PID>


3️⃣ Планирование задач

🟢 Запуск в фоне: Если команда занимает много времени, добавьте & в конце:
long_running_command &

Узнать PID фонового процесса:
jobs -l


🟢 Отложенный запуск: Используйте at, чтобы запланировать выполнение команды:
echo "backup.sh" | at 02:00

Если at не установлен:
sudo apt install at


🟢Периодические задачи: Для регулярных задач используйте cron:
1. Открыть редактор crontab:
crontab -e

2. Добавить задачу (пример: запуск каждую минуту):
* * * * * /path/to/script.sh


⚡️ Советы

Используйте htop для удобной работы с процессами, если командная строка кажется сложной.
Команда pkill позволяет завершить процессы по имени:
pkill firefox

Следите за потреблением ресурсов с помощью iotop (для ввода-вывода) и nmon (общий мониторинг).

Заключение

Управление процессами — это важнейшая часть работы в Linux. Знание этих инструментов позволит вам не только следить за состоянием системы, но и эффективно решать проблемы производительности. 😐

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍106
Мониторинг сети с помощью Python: Начни с SNMP и PySNMP

Мониторинг сетевой инфраструктуры — это основа стабильной работы ИТ-экосистемы. С помощью Python и библиотеки PySNMP можно собрать данные о состоянии устройств и использовать их для анализа или визуализации. Сегодня рассмотрим пример простого скрипта для сбора информации через SNMP.

Что такое SNMP?

SNMP (Simple Network Management Protocol) — это стандартный протокол управления сетями. Он используется для:

🔹Сбора метрик с устройств (CPU, память, трафик интерфейсов).
🔹Отправки уведомлений о событиях.
🔹Управления конфигурацией.

Установка PySNMP

Для работы установим библиотеку PySNMP:
pip install pysnmp


Пример скрипта: Сбор метрик интерфейса

Вот пример кода, который получает статистику интерфейса по OID:
from pysnmp.hlapi import *

# Укажите параметры устройства
snmp_target = '192.168.1.1'
community = 'public'
oid = '1.3.6.1.2.1.2.2.1.10.1' # OID для входящего трафика интерфейса

# Запрос SNMP
def get_snmp_data(target, community, oid):
iterator = getCmd(
SnmpEngine(),
CommunityData(community, mpModel=0),
UdpTransportTarget((target, 161)),
ContextData(),
ObjectType(ObjectIdentity(oid))
)
error_indication, error_status, error_index, var_binds = next(iterator)

if error_indication:
print(f"Error: {error_indication}")
elif error_status:
print(f"Error: {error_status.prettyPrint()}")
else:
for var_bind in var_binds:
print(f"{var_bind[0]} = {var_bind[1]}")

# Выполнение запроса
get_snmp_data(snmp_target, community, oid)


Как это работает:
1. getCmd выполняет запрос на устройство по указанному OID.
2. CommunityData указывает тип доступа (public — стандартное имя сообщества для чтения).
3. Результат содержит текущую метрику (например, объем входящего трафика на интерфейсе).

Применение:
🔹Получите данные о загрузке процессора, памяти или состоянии интерфейсов.
🔹Интегрируйте скрипт в существующую систему мониторинга.
🔹Расширьте функционал для уведомлений или построения графиков.

Что дальше?

Для визуализации собранных данных можно использовать библиотеки, такие как Matplotlib или Pygal. Это позволяет легко строить графики, показывающие состояние сети.

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍151
💡 Короткий совет по Linux

Если вы хотите очистить пустые каталоги, команда find может упростить эту работу:
$ find . -type d -empty -exec rmdir -v {} +
Параметр -type d выполняет поиск каталогов, -empty выбирает пустые каталоги, а -exec rmdir {} выполняет команду rmdir для их удаления.

Команда rmdir гарантирует, что каталог пуст перед его удалением.

В качестве альтернативы, вы также можете использовать эту команду для выполнения той же задачи:
$ find . -type d -empty -delete

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥41
KodeKloud Free Labs — площадка c интерактивными заданиями и реальными сценариями, которые помогут погрузиться в практическое применение принципов DevOps и облачных технологий, не выходя из браузера.

В бесплатных лабах сейчас есть: Linux, Кубер, Docker, GiT, Python и прочие прелести.

👉 DevOps Portal | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥92🤝1
Чем отличается CMD от ENTRYPOINT в Dockerfile?

Инструкции CMD и ENTRYPOINT выполняются в момент запуска контейнера, тольо инструкция CMD позволяет переопределить передаваемые команде аргументы.

Пример 1. CMD: Опишем сборку образа в Dockerfile.
FROM alpine
CMD ["ping", "8.8.8.8"]



В инструкцию CMD передаются 2 аргумента. Выполним сборку образа docker build -t test . и запустим контейнер.
$ docker run test
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=43 time=32.976 ms
64 bytes from 8.8.8.8: seq=1 ttl=43 time=31.998 ms
64 bytes from 8.8.8.8: seq=2 ttl=43 time=31.843 ms
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 31.708/33.316/36.823 ms



Теперь передадим 2 новых аргумента для запуска контейнера.
$ docker run test traceroute 1.1.1.1
traceroute to 1.1.1.1 (1.1.1.1), 30 hops max, 46 byte packets
1 172.17.0.1 (172.17.0.1) 0.017 ms 0.016 ms 0.009 ms
2 192.168.168.1 (192.168.168.1) 0.996 ms 1.553 ms 2.069 ms
3 * * *
4 lag-2-435.bgw01.samara.ertelecom.ru (85.113.62.125) 1.454 ms 1.427 ms 1.984 ms
5 172.68.8.3 (172.68.8.3) 19.685 ms 15.722 ms 15.565 ms
6 172.68.8.2 (172.68.8.2) 15.846 ms 22.696 ms 35.093 ms
7 one.one.one.one (1.1.1.1) 17.439 ms 17.670 ms 24.202 ms


ping заменен на traceroute, IP адрес заменен на 1.1.1.1.


Пример 2. ENTRYPOINT: Опишем сборку образа в Dockerfile.
FROM alpine
ENTRYPOINT ["ping", "8.8.8.8"]



В инструкцию ENTRYPOINT передаются 2 аргумента. Выполним сборку образа docker build -t test . и запустим контейнер.
$ docker run test2
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: seq=0 ttl=43 time=36.189 ms
64 bytes from 8.8.8.8: seq=1 ttl=43 time=44.120 ms
64 bytes from 8.8.8.8: seq=2 ttl=43 time=44.584 ms
^C
--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 36.189/41.631/44.584 ms



Теперь передадим изменим один из аргументов для запуска контейнера.

$ docker run test2 ping 1.1.1.1
BusyBox v1.31.1 () multi-call binary.

Usage: ping [OPTIONS] HOST

Send ICMP ECHO_REQUEST packets to network hosts

-4,-6 Force IP or IPv6 name resolution
-c CNT Send only CNT pings
-s SIZE Send SIZE data bytes in packets (default 56)
-i SECS Interval
-A Ping as soon as reply is recevied
-t TTL Set TTL
-I IFACE/IP Source interface or IP address
-W SEC Seconds to wait for the first response (default 10)
(after all -c CNT packets are sent)
-w SEC Seconds until ping exits (default:infinite)
(can exit earlier with -c CNT)
-q Quiet, only display output at start
and when finished
-p HEXBYTE Pattern to use for payload



Как видим, аргумент передать контейнеру нельзя.

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥6🤔4
Linux. Карманный справочник. 4-е изд

Автор: Дэниел Джей
Год: 2024

📂 Скачать книгу

👉 DevOps Portal | #книги
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥9
This media is not supported in your browser
VIEW IN TELEGRAM
Dockly

Это интерактивный терминальный интерфейс для управления контейнерами Docker.

Утилита позволяет в режиме реального времени просматривать активные контейнеры, образы и сети, выполнять команды, такие как перезапуск или удаление контейнеров, а также получать доступ к их логам и ресурсам.

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

GitHub: dockly

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18🔥3🤝1
Программа сообщает о том, что не может найти свой конфиг. Каким образом можно узнать, где она пытается его найти?

line-buffered опция которая выведет результат как только найдет

strace -f — отслеживание дочерних процессов

strace -f l ftp sitename | & grep --line-buffered open | grep /home/user

Либо в самой программе, если удастся найти параметры

/usr/sbin/mysqld --verbose --help | grep -A 1 «Default options»

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
DistroSea

Удобный способ протестировать операционные системы перед установкой.

Сервис позволяет запустить десятки дистрибутивов Linux, ознакомиться с интерфейсом, протестировать функционал и поработать в терминале.

👉 distrosea.com

👉 DevOps Portal | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11
Ansible против bash-скрипта 😀

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
😁55👍10
ssh commands cheat sheet.pdf
1.5 MB
🔥 Шпаргалка по SSH-командам

Давно не делились полезными шпаргалками! Держите – объемная подборка по SSH: от базовых команд до туннелирования

Сохраняй, пригодится 😎

👉 DevOps Portal | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥7
Примеры типовых операций в bash-скриптах

Арифметические действия, циклы по кол-ву раз

#!/bin/bash
A="10"
B="5"
C=`expr $A + $B`
printf "A=10 B=5 C=expr \$A + \$B C=%d \n" "$C"

# пример цикла по i
I=0
while [ $I -lt 15 ]
do
printf "0x%02x " "$I"
I=`expr $I + 1`
done
echo



Разного рода проверки

#!/bin/bash
# пример проверки существования файла
# создаем файл test1
touch test1
# проверяем существование файла test1
if [ -f test1 ] ; then
echo "файл test1 существует"
fi
# проверяем несуществование файла test2
if ! [ -f test2 ] ; then
echo "файл test2 не существует"
fi
# краткая справка по другим опциям команды [ ]
# -d filename директория существует
# -f filename файл существует
# -L filename символьная ссылка существует
# -r, -w, -x файл доступен для чтения, записи или выполнения
# -s filename файл существует и имеет ненулевую длину
# f1 -nt f2 f1 новее чем f2
# f1 -ot f2 f1 старше чем f2



Работа с FTP

#!/bin/bash
ADDRESS=192.168.1.150
USER=root
PASSWORD=root
ftp -n -p ADDRESS <<EoF
user USER PASSWORD
cd /usr/bin
put my_cool_program
quit
EoF
exit 0



Работа с telnet

#!/bin/bash
(
sleep 1
echo "root"
echo "cd /tmp"
echo "ls"
sleep 1
echo "quit"
) | telnet 192.168.1.150

Примечание: в этом случае root логинится без пароля, если нужен пароль, то надо добавить после echo "root" еще одно эхо с паролем.

Пример цикла по множеству значений

#!/bin/bash
# пример цикла по множеству значений
for A in раз два три четыре пять
do
echo "$A,"
done
echo "вышел заяц погулять"
echo


Не забываем, что для того, чтоб скрипт можно было запустить, надо изменить права доступа к нему, добавив возможность исполнения файла, например командой

chmod a+x
script.sh

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22
Топ 4 лучших типа сервисов Kubernetes в одной диаграмме.

👉 ClusterIP
ClusterIP - это стандартный и наиболее распространенный тип службы. Kubernetes назначает сервису ClusterIP внутренний IP-адрес кластера. Это делает службу доступной только в пределах кластера.

👉 NodePort
Это позволяет вывести сервис за пределы кластера, добавив общекластерный порт поверх ClusterIP. Мы можем запросить сервис по NodeIP:NodePort.

👉 LoadBalancer
Этот способ раскрывает сервис извне, используя балансировщик нагрузки облачного провайдера.

👉 ExternalName
Сопоставляет службу с доменным именем. Обычно это используется для создания службы в Kubernetes для представления внешней базы данных.

👉 DevOps Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍81
Самоучитель по CI/CD в K8s

Отличный ресурс, чтобы освоить Kubernetes и научиться доставлять в него код своих приложений

Пошаговые инструкции, теория и примеры кода помогут быстро погрузиться в процесс

Выбирайте свою технологию:

👉 Node.js
👉 Spring Boot
👉 Django
👉 Go
👉 Rails
👉 Laravel

👉 DevOps Portal | #ресурсы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👀2