Powny command line tools облегчает взаимодействие с Powny API, а так же позволяет проверять работу правил локально.
Зависимости:
Ubuntu
sudo apt-get install python3-pip
OS X
Если у вас стоит brew:
brew install python3
В противном случае, python3 можно скачать с сайта.
Так же необходимо поставить pip3
:
curl -OL https://raw.github.com/pypa/pip/master/contrib/get-pip.py
sudo python3 get-pip.py
Установка powny-cli
На любой системе достаточно выполнить:
pip3 install powny-cli
Для возможности выполнять правила локально надо установить пакет powny-yans
:
pip3 install --extra-index-url http://pypi.yandex-team.ru/simple powny-yans
Утилита тянет с собой не мало зависимостей (в основном, для локального выполнения правил), будьте к этому готовы
Что бы начать работать с powny-cli выполните:
-
git clone ${git_url} ${target_path}
-
cd ${target_path}
-
git checkout ${branch}
(опционально, если правила для целевой инсталяции powny лежат не в master ветке)
После этого powny-cli будет использовать настройки, которые определены в файле ${target_path}/pownyrules.yaml
.
- Склонируйте репозиторий с правилами:
$ git clone [email protected]:alexanderk/powny-load-test-rules.git
$ cd powny-test-rules
- Внесите необходимые изменения:
$ vim rules/on_event_bar.py
- Чтобы загрузить правила в Powny, выполните:
$ powny rules upload
Эта команда пытается синхронизировать ваши изменения с удалённым репозиторием правил, с которым вы работаете. А после - загружает правила в powny.
Output:
INFO:pownycli.client:Upload updated rules to Powny...
INFO:pownycli.uploader:Commit current changes...
INFO:pownycli.uploader:Pull changes from rules server...
INFO:pownycli.uploader:Sync you changes with rules server...
INFO:pownycli.uploader:Upload rules to ssh://[email protected]:2022/var/lib/powny/rules.git...
INFO:pownycli.pownyapi:Set new head: 2238e6636063b57b541c0f1799596e1617dec489
INFO:pownycli.uploader:You rules uploaded to Powny!
Пусть, репозиторий с правилами находится в директории ./powny-rules
и описание события в event.json
.
Убедитесь, что
event.json
в правильном формате, например:
$ cat event.json
{"host":"foo", "service":"100", "status":"CRIT", "description":"test"}
Чтобы выполнить правило запустите:
$ powny rules exec -e event.json
Output:
DEBUG:raava.handlers:Loading rules from head: ; root: /home/cloud-user/powny-cli-test/powny-rules
DEBUG:raava.handlers:Scanning for rules: rules/on_event_bar.py
DEBUG:raava.handlers:Loaded on_event handler from <module 'rules.on_event_bar' from '/home/cloud-user/powny-cli-test/powny-rules/rules/on_event_bar.py'>
DEBUG:raava.handlers:Scanning for rules: rules/on_event_foo_3.py
DEBUG:raava.handlers:Loaded on_event handler from <module 'rules.on_event_foo_3' from '/home/cloud-user/powny-cli-test/powny-rules/rules/on_event_foo_3.py'>
DEBUG:raava.handlers:Scanning for rules: rules/on_event_foo_2.py
DEBUG:raava.handlers:Loaded on_event handler from <module 'rules.on_event_foo_2' from '/home/cloud-user/powny-cli-test/powny-rules/rules/on_event_foo_2.py'>
DEBUG:raava.handlers:Scanning for rules: rules/on_event_foo.py
DEBUG:raava.handlers:Loaded on_event handler from <module 'rules.on_event_foo' from '/home/cloud-user/powny-cli-test/powny-load-test-rules/rules/on_event_foo.py'>
DEBUG:raava.rules:Applied: 0a8e1c3c-b573-4688-9a67-d9f35d56496e --> rules.on_event_foo_3.on_event
DEBUG:raava.rules:Applied: 0a8e1c3c-b573-4688-9a67-d9f35d56496e --> rules.on_event_foo_2.on_event
DEBUG:raava.rules:Applied: 0a8e1c3c-b573-4688-9a67-d9f35d56496e --> rules.on_event_foo.on_event
DEBUG:raava.rules:Event 0a8e1c3c-b573-4688-9a67-d9f35d56496e/host: not matched with <cmp eq(bar)>; handler: rules.on_event_bar.on_event
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): example.com
DEBUG:requests.packages.urllib3.connectionpool:"GET / HTTP/1.1" 200 1270
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): example.com
DEBUG:requests.packages.urllib3.connectionpool:"GET / HTTP/1.1" 200 1270
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): powny-testing.example.net
DEBUG:requests.packages.urllib3.connectionpool:"GET / HTTP/1.1" 200 226
DEBUG:pownyhelpers.output.via_email:Sending email to: ['[email protected]']; cc: []; via SMTP None@localhost
INFO:pownyhelpers.output.via_email:Email sent to: ['[email protected]']; cc: []
Для проверки правил основанных на изменении статуса, используйте JSON файл со списком правил
(см. multi_event_example.json
).
$ powny cluster-info
Output:
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): powny-testing.example.net
{'collector': {'96365003-b273-46a5-b4c6-8ee984a91c2a@powny-collector-localship': {'host': {'fqdn': 'powny-collector-localship',
'node': 'powny-collector-localship'},
'threads': {'die_after': None,
'respawns': 1,
'workers_limit': 1},
'when': '2014-07-29T11:10:55Z'}},
'splitter': {'0f8ee3be-9148-49fd-bb20-ea3e65b0a590@powny-splitter-localship': {'host': {'fqdn': 'powny-splitter-localship',
'node': 'powny-splitter-localship'},
'loader': {'last_commit': '33a72fe756df6834f78bc2916651dfba2896d03f',
'last_head': 'git_33a72fe756df6834f78bc2916651dfba2896d03f',
'rules_dir': '/var/lib/powny/rules'},
'threads': {'die_after': None,
'respawns': 1,
'workers_limit': 1},
'when': '2014-07-29T11:10:53Z'}},
'worker': {'d6f2b259-433b-4d60-b205-33b9867a2f65@powny-worker-localship': {'host': {'fqdn': 'powny-worker-localship',
'node': 'powny-worker-localship'},
'threads': {'die_after': None,
'respawns': 1,
'workers_limit': 1},
'when': '2014-07-29T11:10:55Z'}}}
$ powny job list
$ powny job kill _JOB_UUID_
Если событие простое (состоит из полей host
, service
, status
), то описание может быть переданно как аргументы:
$ powny job send-event http://example.com golem CRIT
Так же, событие может быть описано в файле, который задаётся опцией --file
:
$ powny job send-event --file event.json
Output:
INFO:pownycli.client:Send event: {'host': 'http://example.com', 'service': 'golem', 'status': 'CRIT'}
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): powny-testing.example.net
INFO:pownycli.pownyapi:New event posted. Job Id: ec975edd-5403-44f1-8997-96d3caa8f82d
При установке с пакетом поставляется конфиг по умолчанию (сейчас используется только для настроек логгирования).
Чтобы внести изменения в конфигурацию, необходимые опции можно переписать в файле ~/.config/powny-cli/config.yaml
,
или передать опцию powny --config=my_config.yaml
.
Можно использовать опцию --debug
для более подробного вывода. По умолчанию, уровень логгирования INFO
.
Опции, предназначенные для файлов, могут быть выставленны в -
, в таком случае, вместо файла будет читаться stdin
.
Например:
cat event.json | powny powny --api-url=http://powny-testing.example.net send-event --file -