LINUX.ORG.RU

Сообщения zolden

 

Аналог DB view на уровне файловой системы

Я тут дунул и подумал - а возможно ли на уровне FS организовать следующее
Есть файлопомойка, куда загружается всё подряд.
При этом есть виртуальные директории, в которых видны только файлы из файлопомойки подпадающие под некие фильтры, типа директория с джыпегами, директория с сегодняшними файлами, директория с файлами больше 100Мб и тд

Вопрос именно про уровень FS, а не file manager'а

 ,

zolden
()

Наглядное сравнение I/O

Исходные данные:
Есть сервер логов, который упирается в I/O
Я предполагаю, что возможно ситуацию можно несколько улучшить изменением стратегии хранения данных и более агрессивным сжатием (ибо по CPU есть большой запас)

Задача:
Найти способ наглядного сравнения использования I/O на конкретном разделе. Так как выигрыш будет скорее всего не очень большим то нужна хорошая наглядность, идеальным вариантом мне видится наложение графиков.

Доступные средства:
Из коробки на сервере есть atop(по которому и выявлен bottleneck), смысл показаний и способ использования которого мне пока не очень ясны.То ли нужно задействовать абстрактный busy%, то ли конкретные цифры TPS - хз
Задача разовая, поэтому монстры мониторинга не велкам, однострочники на перле - велкам

 , , ,

zolden
()

На что ругается pgrep?

Делаю скрипт для проверки на состояние процессов по списку.
Так как процессов много, решил распараллелить проверку посредством Popen, но сразу встал в тупик

% cat test.py
from subprocess import Popen
result = Popen(['pgrep','-f','test'], shell = True)

% python test.py
pgrep: не указаны критерии соответствия
Наберите `pgrep --help' для дополнительной информации

% pgrep -f test
966
1495


За что он так со мной и как его дебажить?

 pgrep, ,

zolden
()

Стек(?) для Python+HTTPS

Привет лорогугл
Надумал я тут для самообучения попилить один велосипед, подскажи же мне модный стек технологий для этого, чтобы всё было молодёжно и асинхронно.
Схема примерно такая:
клиент подключается к серверу по HTTPS, шлёт POST/GET c XMLками в качестве контента, сервер дёргает DB, отдаёт выхлоп клиенту взад.
Клиент - не браузер, а другое приложение, поэтому сверхнавороченный HTTP сервер и чудеса шаблонов наверное без надобности (в первом приближении клиент кроме HTTP 200 даже и кодов других не будет обрабатывать)
Так как знаю только питон немножко, то в основе будет он
Как я понял, сам сервер лучше поставить за Nginx, дальше пока не придумал.

 , ,

zolden
()

VRRP сквозь bond интерфейс

Сценарий следующий:

 
Switch1-----VRRP IP-----Switch2
      \                /
       \              /
       eth0         eth1
          Host(bond) 

Линк между свичами очень надёжен, но всё-же один и если он упадёт, то получим split-brain и оба свича станут VRRP Master
Чисто ради расширения кругозора хочу понять можно ли пропускать VRRP пакеты сквозь bond(режим Fault tolerance)
Ping mky, vel

 , ,

zolden
()

Связность/маршрутизация через другой интерфейс

Схема:

      eth0 (1.1.1.1)<->server1 (3.3.3.3:1234)
     /
host
    \
     vlan123(2.2.2.2)<->server2 (5.5.5.5:1234)


Хост может общаться с server1 через дефолтный шлюз через eth0
Связности через VLAN интерфейс до server1 нет.

Как сделать чтобы приложение, которое может инициировать запросы только с src_ip=2.2.2.2 могло подключиться к 3.3.3.3:1234?

Cвязность с server2:1234 при этом не должна быть затронута

 ,

zolden
()

Настраиваемый аналог tcpreplay для UDP?

Есть приложение которое принимает по UDP запросы от внешней железки.
Для тестирования хотелось бы генерировать эти запросы локально, чтобы не зависеть от внешних факторов и делать это быстрее.
Условия:
1. Приложение ожидает пакеты с определённого IP адреса, локально я такой на интерфейс назначить не могу.
2. Есть дамп пакетов, т.е. структура известна
Вопрос:
Можно ли и если можно то чем, используя существующий дамп генерировать запросы локально, гибко меняя нужные поля?
Использование существующего дампа непринципиально, но это сэкономило бы время, а то вручную его воспроизводить слишком муторно
Подумывал о какой-нибудь библиотеке для питона, но инструмент в общем тоже непринципиален.

 , ,

zolden
()

Манипуляция (перестановка) строк

Привет лор, посоветуй мне опять манипуляторов
Хочу уметь красиво форматировать консольный вывод

Входные данные:

vlan 123
master 1.1.1.1
slave 2.2.2.1
vlan 345
master 1.1.1.2
slave 2.2.2.2

Желаемый результат:
vlan 123 345
master 1.1.1.1 1.1.1.2
slave 2.2.2.1 2.2.2.2

emulek, выручай

 ,

zolden
()

Автодополнение zsh для vim scp

Часто сравниваю локальные конфиги с конфигами на других хостах используя

vimdiff /path/to/config.cfg scp://remotehost//path/to/config.cfg

Если для простого ssh/scp автокомплит zsh работает практически искаропки, то для такого формата автокомплит ниасиливает догадаться, что именно я от него хочу и приходится путь на удалённом хосте каждый раз писать полностью руками.
Руками, Карл.
Гугл сходу ничего не подсказал, лор, выручай меня скорее

 , ,

zolden
()

Peerflix с человеческим лицом

Недавно открыл для себя peerflix и возрадовался.
По мне это гораздо удобнее для киношек, чем классические торрент-клиенты, экономится много кликов и всё такое, но есть пара ньюансов юзабилити, которые портят дело.
Вот что хотелось бы в идеале:
1) скачивается торрент файл
2) при открытии торрент файла запускается
- плеер, если это единичный видео файл и сразу начинается проигрывание
- торрент клиент, если это пачка файлов/или не видео файл
3) если игрался видео файл, то при открытии другого файла, старые данные подчищаются автоматом (открыл киношку, повтыкал пять минут, понял что отстой и открыл другую), при закрытии плеера старые данные тоже должны подчищаться (открыл киношку, повтыкал пять минут, понял что отстой и пошёл спать)

Я неспешно начал пилить велосипед на питоне (JS вообще не знаю, а нём наверное даже лучше было бы), реализовав логику второго пункта, но с 3м пунктом у меня иссякла фантазия (процессы peerflix плодятся при открытии следующего торрент файла, старые данные не подчищаются при закрытии плеера, итп), и поэтому я решил спросить совета у ЛОРа
ЛОР, посоветуй мне, может это всё уже давно реализовано - проигрывание торрентов «без скачивания», лишних кликов и окон

Вот то, что пока получилось, может гуру питона ещё что подскажут

 , peerflix,

zolden
()

Добыча кислорода в экстренных условиях

В честь вторника наброшу одну не очень весёлую историю из детства.
Маленький приморский городок.
Во время работ не очень в общем-то глубоко и не очень далеко от берега, произошёл несчастный случай с водолазом. Его вытащили, живого.
Так как историю слышал из третьих рук, то всех деталей случая не знаю
Глубины там не очень большие, поэтому может и не в декомпрессии дело, но в результате водолазу понадобилась кислородная подушка.
Город маленький, время позднее и его мало.
Сходу подушку не нашли ни в больнице, ни где либо ещё, родственники обзванивали всё что могли, от безысходности даже службу газа.
Не нашли, итог печальный.

Что бы теоретики ЛОРа посоветовали в таких случаях?

Update:
Больше интересен теоретический (физика/химия в домашних или почти домашних условиях) аспект дела, чем социально-экономический, всё-таки раздел форума у нас соответствующий

zolden
()

Параллельное выполнение скрипта по ssh

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

cat proc_uptime.sh | ssh server /bin/bash
Результат выглядит примерно так: 1324634 343245 546456 657567

Непосредственно в скрипте:

import commands
serverlist = [[] for i in range(SERVERS_NUM)]
for n in range(SERVERS_NUM):
    cmd = 'cat test.sh | ssh server' + str(n+1) + ' /bin/bash'
    serverlist[n] = commands.getoutput(cmd).split()

Т.е. получаем список списков, где для каждого сервера будет список аптаймов его процессов
Это всё даже работает и даже с приемлемой скоростью, но это пока все сервера в строю и нет ошибок.
При каких-то затыках с одним сервером в цикле у меня всё встанет колом.
Что я думаю нужно в идеале:
все запросы к серверам выполняются параллельно и отстреливаются на всякий случай после Х секунд неответа
Гугл подсказал мне для моего случая вполне подойдёт вариант с Popen
Но ман плохо раскуриваются и я так и не понял как мне с помощью Popen получить вывод скрипта в список (т.е. упорядоченно)
Лорогуру питона, посоветуйте мне полезных советов

UPDATE:
Что у меня пока получилось (Бог его знает насколько это канонично, феншуйно и надёжно, но ускорение почти линейное получилось)

    serverlist = ['server01','server02','server03','fake_test_server','server04','server05']
    running_procs = [Popen(['./wrapper.sh',server],stdout=PIPE, stderr=PIPE) for server in serverlist]
    d = defaultdict((lambda:['N/A','N/A','N/A','N/A','N/A']))
    while running_procs:
        for proc in running_procs:
            retcode = proc.poll()
            if retcode is not None: # процесс отработал
                res = proc.communicate()[0]
                if res:
                    d[res.partition(' ')[0]] = res.partition(' ')[2].split(' ')
                running_procs.remove(proc)
                break
            else: # процесс ещё работает, будем подождать
                time.sleep(.1)
                continue 

 , ,

zolden
()

Вытащить аптайм процесса по имени пользователя и названию процесса

Для наблюдения за аптаймом процесса использую вывод

ps -C process_name -o lstart=
всё хорошо работает, в случае если имя процесса уникально
Если же несколько пользователей запускают приложение, то получается чад кутежа во мгле ада
Меня интересует процесс конкретного пользователя, но вариант
ps -U username -C process_name -o lstart=
не срабатывает, ибо сцк выводит все процессы пользователя, т.е. ключ -C не применяется как фильтр
Я могу конечно заморочаться с грепами, но это неспортивно
Подскажи лор, есть ли красивый способ это сделать

 ,

zolden
()

Мониторинг сетевой активности процесса

Задача:
убедиться, что процесс не завис (+ничего не сломалось на другой стороне), а что-то реально гоняет по сети
Что именно гоняет это не так интересно, в принципе по растущим счётчикам Tx/Rx пакетов это вполне должно быть понятно.

Вопрос:
не хочу стрелять из пушки по воробьям, и использовать tcpdump/nethogs, хотелось бы чего то лёгкого, воздушного, пригодного для скриптования.
Подумал о парсинге /proc/$PID/net/* но сходу не понял за что там можно зацепиться.
ЛОР, посоветуй

 ,

zolden
()

Пропадает звук на ноуте

Kubuntu 14.10
Со случайной периодичностью пропадает звук, обычно замечаю во время просмотра кино.
При этом в наушниках звук есть.
Гугл и лор указывает на pulseaudio, но не уверен, тот ли этот случай, ибо рестарт пульсы не помогает - лечится только ребутом.
В логах ничего про пульсу при этом нет, так что хз куда копать.
При переборе вариантов поставил pulseaudio 5 из PPA - никакой разницы

 

zolden
()

Регулярка для разбора лога

Тренируюсь в разбора логов на питоне и поставила меня в тупик ситуация с модификаторами повторения
Надо сматчить названия name1,name2,name3,name4 в следующем случае

	 [Id] = 123
	 строка
	 строка
	 строка
	 строка
	 строка
	 строка
	 [Number] = {total(4)}
	 [Element 1]- one = 1
	 [Element 1]- two = name1
	 [Element 2]- one = 3
	 [Element 2]- two = name2
	 [Element 3]- one = 5
	 [Element 3]- two = name3
	 [Element 4]- one = 14
	 [Element 4]- two = name4

Я было захардкодил регексп на 4 элемента и это работает, но потом обнаржил что количество таких совпадений может различаться.
В принципе количество можно брать из строки total, но пока пробую вариант с модификаторами числа повторений, идея вот такая:

\[Id\] = 123\n.*\n.*\n.*\n.*\n.*\n.*\n.*\n.*(\[Element [0-9]\]\- first.*\n.*\[Element [0-9]\]\- second = (.*)){1,}
Но так не взлетело. Как это сделать по уму?

 

zolden
()

Удалить перевод строки перед паттерном

Есть длинный лог в котором встречаются записи такого вида:

timestamp hostname process Informational  YYYYYYYYYYYY  127.0.0.1  Match result. ID[12345] bla-bla-bla
	 [Policy] = 54321

Мне надо вытащить сопоставление всех ID и Policy (перебираю все записи по ID).
Всё было бы тривиально, если бы Policy находился на одной строке с ID
Очевидное решение - вытянуть Policy на предыдущую строку, для чего надо удалить предыдущий перевод строки (blah-blah-blah слишком вариативен и его трудно использовать в качестве паттерна, для удаления следующего перевода строки)
Вопрос собственно в том как это сделать
ping sdio, emulek

 ,

zolden
()

Вывод поста в одну страницу

А напомните как смотреть топики со всеми комментами в одной странице, т.е. без пейджинга.
Какой-то вроде был параметр в URL

zolden
()

Гибконастраиваемая подсветка логов. Хочу.

Для разбора больших логов иногда применяю перловую конструкцию вида

echo -e "string1\nerror\nsuccess\nstring2\nfail" |\
    perl -p -e 's/(success)/\e[1;32;10m$&\e[0m/g;' -e 's/(error|fail)/\e[0;31;10m$&\e[0m/g'
чтобы подсветить success зелёным, ошибочные сообщения красным (остальные строки *тоже выводятся*, пусть и не так важны, поэтому grep не котируется)
Но в некоторых случаях было бы полезнее подсветить значения после маркера, а не сам маркер, т.е. в строках
Marker1: value1
Marker2: value2
надо подсветить value1 и value2, зная только имя маркеров.
На это моего знания perl/sed уже не хватает, плиз хелп

 ,

zolden
()

Изменение маршрута на blackhole

Для тестирования надо периодически убивать маршруты (заруливаю в blackhole для этого), но делать это двумя командами (ip r d существующий_маршрут;ip r a dest blackhole)скучно
Никак не могу раскурить ман на тему ip route replace (ip route change), чтобы изменить маршрут в blackhole (или в prohibit) одной командой, ни один вариант не проходит

mky, подскажико, а

 , ,

zolden
()

RSS подписка на новые темы