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

Связь: @devmangx

РКН: https://clck.ru/3P8kFH
Download Telegram
Как вывести лог 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