Инсталлируем ELKa (https://www.elastic.co) направляем туда все логи, и имеем централизованное хранилище, возможность от приходящей информации что-то делать и много еще чего...
1 18-05-2016 12:04:05
Re: Софт для анализа журнала событий (1 ответов, оставленных в Иные программы.)
2 18-05-2016 11:59:08
Re: Не устанавливается Windows 7 на KVM (3 ответов, оставленных в Linux)
Никогда гуя не видел, все ставится хорошо.
3 12-05-2016 19:20:58
Re: Не устанавливается Windows 7 на KVM (3 ответов, оставленных в Linux)
Все как тут делаем Chapter 9. Installing a fully-virtualized Windows guest ?
4 03-05-2016 18:12:28
Re: IPTables NAT и FTP (2 ответов, оставленных в Linux)
Можно, но как оказывается не все пропускается во всех сетях, и так проще попасть. А все не хочу так как это еще и фаервол.
5 30-04-2016 15:28:17
Тема: IPTables NAT и FTP (2 ответов, оставленных в Linux)
Вот понадобилось мне вывести наружу ftp, кстати, поднял очень даже не плохой роутер на Centos, совсем удалился я от FreeBSD..... Ну да ладно... Есть пулл входящих IP и куча серверов, проблема для любого FTP за натом стандартная - пассивные порты и ответ с другого внешнего IP (тот что GW по умолчанию)
Пример iptables
*nat
:PREROUTING ACCEPT [24159:1702354]
:INPUT ACCEPT [16402:1084803]
:OUTPUT ACCEPT [2046:158805]
:POSTROUTING ACCEPT [509:46875]
-A PREROUTING -d 193.333.222.111/32 -i ens5 -p tcp -m tcp --dport 20 -j DNAT --to-destination 10.0.0.14:20
-A PREROUTING -d 193.333.222.111/32 -i ens5 -p tcp -m tcp --dport 21 -j DNAT --to-destination 10.0.0.14:21
-A PREROUTING -d 193.333.222.111/32 -i ens5 -p tcp -m tcp --dport 1024:65535 -j DNAT --to-destination 10.0.0.14:1024-65535
-A POSTROUTING -s 10.0.0.14/32 -o ens5 -j SNAT --to-source 193.333.222.111
-A POSTROUTING -o ens5 -j MASQUERADE
Что тут происходит, все порты которые нужны для ftp пробрасываются на внутренний сервер, плюс все исходящее с внутреннего сервера привязывается к его IP, так как при переходе на пассивные порты сервер начинает отвечать с общего исходящего IP. Можно еще добавить 1024:65535 на postrouting и RELATED,ESTABLISHED на prerouting, но это все дело вкуса...
6 04-03-2016 12:08:03
Re: Репликация между Mysql 5.1 и 5.6 [ERROR] Slave SQL: Error 'BIGINT (4 ответов, оставленных в Базы данных)
Настоятельно рекомендую Percona XtraDB Cluster, тот же MySQL, но много всего сверху, например wsrep, xtrabackup...
7 07-02-2016 20:26:39
Тема: Динамическая настройка Zabbix и Haproxy (0 ответов, оставленных в Иные программы.)
Последнее время, для своих нужд, я пересел на zabbix, как на основной софт для мониторинга. Есть плюсы и минусы, но в целом - все что мне надо он умеет и нет необходимости настраивать что-то через командную строку, все кликается через web панель.
А поделится я хочу примером как можно настроить динамический мониторинг для haproxy балансера. Система только готовится пойти в прод - поэтому метрики пока смешные, но не в них дело...
1. Скрипты для сбора метрик с haproxy (их можно применить и с другими программами, например Graphite)
Скрипт для определения потоков (vhost если брать за аналог apache)
/etc/zabbix/sh/haproxy-discovery.sh
#!/bin/sh
sock='/tmp/haproxy.sock'
loop1=0
loop2=0
ha_names_list=`echo 'show stat' | socat - UNIX-CLIENT:$sock | grep -v '^#' | grep -v '^$' | grep -v '^stats,' | awk -F ',' '{print $1","$2}'`
echo "{";
echo " \"data\":["
echo $ha_names_list | sed 's/\(.\) /\1\n/g' \
| while IFS=',' read name type; do
echo 'show stat' | socat - UNIX-CLIENT:$sock | grep '^#' | sed 's/[#| ]//g' | sed 's/\(.\),/\1\n/g' | grep -v '^$' \
| while read params; do
if ! echo $params | egrep -q '^pxname|svname|status|last_chk|lastsess$'; then
[ "$loop1" == "1" ] || [ "$loop2" == "1" ] && echo ","
loop2=1
echo -n " {"
echo -n "\"{#HANAME}\":\"$name\"",
echo -n "\"{#HATYPE}\":\"$type\"",
echo -n "\"{#HAPARAMS}\":\"$params\""
echo -n "}"
fi
done
loop1=1
done
echo
echo " ]"
echo "}"
На выходе получаем json по которому сработает автопоиск заббикса.
{
"data":[
{"{#HANAME}":"http","{#HATYPE}":"FRONTEND","{#HAPARAMS}":"qcur"},
{"{#HANAME}":"http","{#HATYPE}":"FRONTEND","{#HAPARAMS}":"qmax"},
{"{#HANAME}":"http","{#HATYPE}":"FRONTEND","{#HAPARAMS}":"scur"},
{"{#HANAME}":"http","{#HATYPE}":"FRONTEND","{#HAPARAMS}":"smax"},
{"{#HANAME}":"http","{#HATYPE}":"FRONTEND","{#HAPARAMS}":"slim"},
{"{#HANAME}":"http","{#HATYPE}":"FRONTEND","{#HAPARAMS}":"stot"},
...
{"{#HANAME}":"adx_static","{#HATYPE}":"BACKEND","{#HAPARAMS}":"ttime"}
]
}
Список потоков и всех метрик
/etc/zabbix/sh/haproxy-stat.sh
#!/bin/sh
sock='/tmp/haproxy.sock'
ha_params_list=`echo 'show stat' | socat - UNIX-CLIENT:$sock | grep '^#' | sed 's/[#| ]//g' | sed 's/\(.\),/\1\n/g' | grep -v '^$'`
echo 'show stat' | socat - UNIX-CLIENT:$sock \
| while IFS=',' read ${ha_params_list}; do
[ "$pxname" == '# pxname' ] && continue
[ "$pxname" == '' ] || [ "$svname" == '' ] && continue
[ "$status" == 'UP' ] || [ "$status" == 'OPEN' ] && tstatus="1" || tstatus="2"
echo $ha_params_list | sed 's/\(.\) /\1\n/g' | while read params; do
if ! echo $params | egrep -q '^pxname|svname|status|last_chk|lastsess$'; then
echo "$pxname $svname ${params}:${!params:-0}"
fi
done
echo "$pxname $svname status:${tstatus:-0}"
done
На выходе список, заббикс не умеет брать все параметры сразу, точнее умеет, но тут не все так просто... Поэтому я ежеминутно сохраняю список в файл откуда заббикс и берет метрики по одной.
...
http FRONTEND slim:10000
http FRONTEND stot:161301
http FRONTEND bin:20078739
http FRONTEND bout:37266663
...
2. Настройка zabbix-agent
/etc/zabbix/zabbix_agentd.conf.d/haproxy.conf
# cron script needed for create /tmp/haproxy.stat
# $1 - F/B name
# $2 - type or server name
# $3 - value name
UserParameter=haproxy[*],HOME=/var/lib/zabbix cat /tmp/haproxy.stat | grep '$1' | grep '$2' | grep '$3' | awk -F ':' '{print $$2}'
UserParameter=haproxy.discovery,HOME=/var/lib/zabbix /etc/zabbix/sh/haproxy-discovery.sh
3. Cron
/etc/cron.d/haproxy-stat.cron
* * * * * haproxy /etc/zabbix/sh/haproxy-stat.sh > /tmp/haproxy.stat
4. Ну и самое неприятное, накликать все в zabbix-server (но можно и xml имрортировать)
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>2.0</version>
<date>2016-02-07T16:19:15Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template HAPR</template>
<name>Template HAPR</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Haproxy</name>
</application>
</applications>
<items/>
<discovery_rules>
<discovery_rule>
<name>Haproxy discovery</name>
<type>0</type>
<snmp_community/>
<snmp_oid/>
<key>haproxy.discovery</key>
<delay>30</delay>
<status>0</status>
<allowed_hosts/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<delay_flex/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<filter>{#HAPARAMS}:^(qcur|qmax|scur|smax|rate|rate_max|hrsp.*)$</filter>
<lifetime>30</lifetime>
<description/>
<item_prototypes>
<item_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} bytes in</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>haproxy[{#HANAME},{#HATYPE},bin]</key>
<delay>45</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>B</units>
<delta>1</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Haproxy</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
</item_prototype>
<item_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} bytes out</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>haproxy[{#HANAME},{#HATYPE},bout]</key>
<delay>45</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>B</units>
<delta>1</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Haproxy</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
</item_prototype>
<item_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} hrsp_1xx</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>haproxy[{#HANAME},{#HATYPE},hrsp_1xx]</key>
<delay>45</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>2</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Haproxy</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
</item_prototype>
<item_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} hrsp_2xx</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>haproxy[{#HANAME},{#HATYPE},hrsp_2xx]</key>
<delay>45</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>2</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Haproxy</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
</item_prototype>
<item_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} hrsp_3xx</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>haproxy[{#HANAME},{#HATYPE},hrsp_3xx]</key>
<delay>45</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>2</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Haproxy</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
</item_prototype>
<item_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} hrsp_4xx</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>haproxy[{#HANAME},{#HATYPE},hrsp_4xx]</key>
<delay>45</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>2</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Haproxy</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
</item_prototype>
<item_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} hrsp_5xx</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>haproxy[{#HANAME},{#HATYPE},hrsp_5xx]</key>
<delay>45</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>2</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Haproxy</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
</item_prototype>
<item_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} hrsp_other</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>haproxy[{#HANAME},{#HATYPE},hrsp_other]</key>
<delay>45</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>2</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Haproxy</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
</item_prototype>
<item_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} Session Total Time</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>haproxy[{#HANAME},{#HATYPE},ttime]</key>
<delay>45</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units>ms</units>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Haproxy</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
</item_prototype>
<item_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} status</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>haproxy[{#HANAME},{#HATYPE},status]</key>
<delay>45</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Haproxy</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
</item_prototype>
<item_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} {#HAPARAMS}</name>
<type>0</type>
<snmp_community/>
<multiplier>0</multiplier>
<snmp_oid/>
<key>haproxy[{#HANAME},{#HATYPE},{#HAPARAMS}]</key>
<delay>45</delay>
<history>7</history>
<trends>365</trends>
<status>0</status>
<value_type>3</value_type>
<allowed_hosts/>
<units/>
<delta>0</delta>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<formula>1</formula>
<delay_flex/>
<params/>
<ipmi_sensor/>
<data_type>0</data_type>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Haproxy</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
</item_prototype>
</item_prototypes>
<trigger_prototypes/>
<graph_prototypes>
<graph_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} HTTP responses codes</name>
<width>900</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>1</show_work_period>
<show_triggers>1</show_triggers>
<type>0</type>
<show_legend>1</show_legend>
<show_3d>0</show_3d>
<percent_left>0.0000</percent_left>
<percent_right>0.0000</percent_right>
<ymin_type_1>0</ymin_type_1>
<ymax_type_1>0</ymax_type_1>
<ymin_item_1>0</ymin_item_1>
<ymax_item_1>0</ymax_item_1>
<graph_items>
<graph_item>
<sortorder>0</sortorder>
<drawtype>0</drawtype>
<color>C8C800</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template HAPR</host>
<key>haproxy[{#HANAME},{#HATYPE},hrsp_other]</key>
</item>
</graph_item>
<graph_item>
<sortorder>1</sortorder>
<drawtype>0</drawtype>
<color>00C8C8</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template HAPR</host>
<key>haproxy[{#HANAME},{#HATYPE},hrsp_5xx]</key>
</item>
</graph_item>
<graph_item>
<sortorder>2</sortorder>
<drawtype>0</drawtype>
<color>C800C8</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template HAPR</host>
<key>haproxy[{#HANAME},{#HATYPE},hrsp_4xx]</key>
</item>
</graph_item>
<graph_item>
<sortorder>3</sortorder>
<drawtype>0</drawtype>
<color>0000C8</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template HAPR</host>
<key>haproxy[{#HANAME},{#HATYPE},hrsp_3xx]</key>
</item>
</graph_item>
<graph_item>
<sortorder>4</sortorder>
<drawtype>0</drawtype>
<color>00C800</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template HAPR</host>
<key>haproxy[{#HANAME},{#HATYPE},hrsp_2xx]</key>
</item>
</graph_item>
<graph_item>
<sortorder>5</sortorder>
<drawtype>0</drawtype>
<color>C80000</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template HAPR</host>
<key>haproxy[{#HANAME},{#HATYPE},hrsp_1xx]</key>
</item>
</graph_item>
</graph_items>
</graph_prototype>
<graph_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} Network Traffic</name>
<width>900</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>1</show_work_period>
<show_triggers>1</show_triggers>
<type>0</type>
<show_legend>1</show_legend>
<show_3d>0</show_3d>
<percent_left>0.0000</percent_left>
<percent_right>0.0000</percent_right>
<ymin_type_1>0</ymin_type_1>
<ymax_type_1>0</ymax_type_1>
<ymin_item_1>0</ymin_item_1>
<ymax_item_1>0</ymax_item_1>
<graph_items>
<graph_item>
<sortorder>0</sortorder>
<drawtype>0</drawtype>
<color>C80000</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template HAPR</host>
<key>haproxy[{#HANAME},{#HATYPE},bin]</key>
</item>
</graph_item>
<graph_item>
<sortorder>1</sortorder>
<drawtype>0</drawtype>
<color>00C800</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template HAPR</host>
<key>haproxy[{#HANAME},{#HATYPE},bout]</key>
</item>
</graph_item>
</graph_items>
</graph_prototype>
<graph_prototype>
<name>Haproxy {#HANAME}/{#HATYPE} Session Total Time</name>
<width>900</width>
<height>200</height>
<yaxismin>0.0000</yaxismin>
<yaxismax>100.0000</yaxismax>
<show_work_period>1</show_work_period>
<show_triggers>1</show_triggers>
<type>0</type>
<show_legend>1</show_legend>
<show_3d>0</show_3d>
<percent_left>0.0000</percent_left>
<percent_right>0.0000</percent_right>
<ymin_type_1>0</ymin_type_1>
<ymax_type_1>0</ymax_type_1>
<ymin_item_1>0</ymin_item_1>
<ymax_item_1>0</ymax_item_1>
<graph_items>
<graph_item>
<sortorder>0</sortorder>
<drawtype>0</drawtype>
<color>C80000</color>
<yaxisside>0</yaxisside>
<calc_fnc>2</calc_fnc>
<type>0</type>
<item>
<host>Template HAPR</host>
<key>haproxy[{#HANAME},{#HATYPE},ttime]</key>
</item>
</graph_item>
</graph_items>
</graph_prototype>
</graph_prototypes>
<host_prototypes/>
</discovery_rule>
</discovery_rules>
<macros/>
<templates/>
<screens/>
</template>
</templates>
</zabbix_export>
5. Результат
8 15-10-2015 18:13:03
Re: Работа системного администратора, программиста... (2 ответов, оставленных в Разное)
Разница примерно как между дядей который замешивает бетон и дядей который строит стену... По сути не умеющий программировать администратор никому не нужен, и чаще всего является виндоусистом. А вот если вы знаете технологии, стандарты и основные технические решения, да еще и покодить можете, вот такие много где нужны. Во общем после окончания вуза вы можете раздувать мангал дипломом, так как скорее всего он и знания которые вы получите только для этого и сгодятся. Админом или программистам вас не возьмут, лучше всего устроится в службе технической поддержки в большую компанию, где есть много систем. Так вы узнаете поверхностно технологию и получите навыки обладания телепатией. А дальше все зависит от вас, чаше всего талантливых замечают и дают им больше возможностей, в итоге можно перейти как стажер в администраторы или программисты, где вас и подпустят напрямую к тому где получают реальный опыт. Во общем 2-4 года, а дальше пожизненное само совершенство, так как технология не стоит на месте. Так же к тому времени определитесь с направлением, например: программирование и на каком языке, администрирование базы данных, хостинг, виртуализация, хранилища, сеть, дата центры, безопасность... всего очень много и все интересно.
Да кстати, издержки производства - это звонки в не рабочее время и непонятный график, не всегда и не везде, но в целом как у кассира не будет, мое время кончилось, я пошел домой...
9 13-10-2015 19:08:31
Re: Apache24+ssl (8 ответов, оставленных в Все HTTPD 80-й порт.)
1. При поморщи SSL мы защищаем данные которые передаются между клиентом и сервером путем их кодирования.
2. Виртуальный-реальный, фигня для рекламы, как и облако... Суть в том что для обычного SSL вам нужно иметь уникальную пару IP-DOMEN, нельзя повесить на один IP несколько доменов с разными SSL сертификатом. Для того чтобы это можно было реализовать в новых веб серверах добавлена поддержка SNI. Сильно не вдаюсь, тут https://en.wikipedia.org/wiki/Server_Name_Indication хорошо описана проблема.
Добавлено: 13-10-2015 17:08:31
А да,
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.
пере генерируйте сертификат без пароля.
10 29-09-2015 12:26:58
Тема: Простой kickstart c KVM (0 ответов, оставленных в Кластерно-облачные технологии и виртуализация)
Как просто и быстро устанавливать контейнеры когда нет никакой автоматизации, а кликать лень:
1. Создаем KS файл для Centos
auth --enableshadow --passalgo=sha512
text
firstboot --enable
keyboard --vckeymap=us --xlayouts='us'
lang en_US.UTF-8
rootpw --iscrypted $6$QfZ0...wrap...nmr0
timezone Europe/Copenhagen --isUtc
ignoredisk --only-use=vda
bootloader --location=mbr --boot-drive=vda
clearpart --all --drives=vda
part / --fstype="xfs" --ondisk=vda --size=1 --grow
part swap --fstype="swap" --ondisk=vda --size=1024
reboot
%packages
@core
%end
%addon com_redhat_kdump --disable --reserve-mb='auto'
%end
2. Пример установочного скрипта
# cat vm-install-centos-example.sh
virt-install \
--autostart \
--name snbdhcpv0001l00 \
--ram 4096 \
--disk path=/var/lib/libvirt/images/snbdhcpv0001l00.qcow2,bus=virtio,format=qcow2,size=20 \
--vcpus 2 \
--noautoconsole \
--os-type linux \
--os-variant rhel7 \
--network bridge=br0.131 \
--network network=ovs-br1 \
--graphics vnc,listen=0.0.0.0,password=PASSSSSS,port=5923 \
--location 'http://mirror.fysik.dtu.dk/linux/centos/7/os/x86_64/' \
--extra-args='ks=http://10.8.31.51/ks/ks_default.txt ksdevice=eth0 ip=10.8.31.23 netmask=255.255.255.0 dns=172.22.25.3 gateway=10.8.31.1'
Все, минимум изменений в .sh файле и все устанавливается быстро и просто, а если еще и salt-ssh использовать, то после установки без дополнительных телодвижений он все настроит и подготовит.
11 27-08-2015 15:21:30
Re: Установка GD библиотеки (4 ответов, оставленных в PHP)
Такой и алгоритм
yum install php-gd
yum обновит весь php до последней 5.3.3 и поставит php-gd. Но перед тем как писать "Y" убедитесь что все-таки php обновляется в 5.3.3, так как в какую версию обновлять указано в самом rpm файле, так однажды был обновлен php c 5.2 в 5.3 на 100 хостинго серверах, так как в Atomic Rocket Turtle посчитали что это нормально.
12 05-08-2015 11:19:00
Тема: Как с openvswitch отделить один или несколько VLAN'ов (1 ответов, оставленных в Кластерно-облачные технологии и виртуализация)
Есть https://unix-forum.ru/topic1841.html сеть со всеми vlan'ами, теперь надо выделить один и подать его в виртуалку. Для этого создаем отдельный бридж.
# ovs-vsctl add-br vlan236
Bridge "vlan236"
Port "vlan236"
Interface "vlan236"
type: internal
создаем в нем порт, через который в него подадим весь трафик и указываем что через этот порт мы соединяемся с br0 бриджем, где есть все vlan'ы
# ovs-vsctl add-port vlan236 vlan236-br0 -- set interface vlan236-br0 type=patch options={peer=br0-vlan236}
и тоже самое делаем со стороны br0, только ограничиваем какой vlan подать
# ovs-vsctl add-port br0 br0-vlan236 tag=236 -- set interface br0-vlan236 type=patch options={peer=vlan236-br0}
Все, сеть настроена, надо только добавить ее в KVM через "virsh net-define"
# ovs-vsctl show
7a0c9d14-3166-4173-8813-bb43a01e39f0
Bridge "vlan236"
Port "vnet4"
Interface "vnet4"
Port "vlan236"
Interface "vlan236"
type: internal
Port "vlan236-br0"
Interface "vlan236-br0"
type: patch
options: {peer="br0-vlan236"}
Bridge "br0"
Port "vnet2"
Interface "vnet2"
Port "br0"
Interface "br0"
type: internal
Port "bond0"
Interface "bond0"
Port "br0-vlan236"
tag: 236
Interface "br0-vlan236"
type: patch
options: {peer="vlan236-br0"}
Port "vnet0"
Interface "vnet0"
ovs_version: "2.3.1"
13 30-07-2015 16:07:12
Re: не работает SSO (1 ответов, оставленных в Windows)
Как настроен кербирос на centos сервере? (/etc/krb.conf)
14 27-07-2015 19:14:30
Тема: Как подать в KVM сеть со всеми VLAN'ами (0 ответов, оставленных в Кластерно-облачные технологии и виртуализация)
Есть задача, внутри KVM виртуалки работать с vlan'ами. Оказывается linux-bridge успешно режет все теги. Было решено воспользоваться openvswitch'ом.
openvswitch взят из openstack-kilo
libvirt взят из ovirt
На физическом сервере настраиваем bonding и на прямую от него сеть обслуживание. Как бы не говорили документации что очень правильно это делать через openvswitch - врут. Он иногда дохнет, и тогда уже не подсоединится к серверу.
# cat /etc/sysconfig/network-scripts/ifcfg-eno49
DEVICE="eno49"
ONBOOT=yes
NETBOOT=yes
UUID="bf732870-bc03-4a62-a1e5-686fd958928d"
IPV6INIT=yes
BOOTPROTO=none
HWADDR="8c:dc:d4:ac:dd:cc"
TYPE=Ethernet
NAME="eno49"
MASTER=bond0
SLAVE=yes
# cat /etc/sysconfig/network-scripts/ifcfg-eno50
DEVICE="eno50"
ONBOOT=yes
NETBOOT=yes
UUID="8bd8d8fb-9392-4028-a8be-b7b808fe6cdd"
IPV6INIT=yes
BOOTPROTO=none
HWADDR="8c:dc:d4:ac:dd:cd"
TYPE=Ethernet
NAME="eno50"
MASTER=bond0
SLAVE=yes
# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
BONDING_OPTS="miimon=100 updelay=0 downdelay=0 mode=802.3ad"
TYPE=Bond
BONDING_MASTER=yes
ONBOOT=yes
# cat /etc/sysconfig/network-scripts/ifcfg-bond0.222
DEVICE=bond0.222
ONBOOT=yes
BOOTPROTO=none
VLAN=yes
NM_CONTROLLED=no
IPADDR=111.111.111.2
PREFIX=24
GATEWAY=111.111.111.1
DNS1=1.1.1.1
DNS2=1.1.2.2
Выключаем NetworkManager и Firewalld
systemctl stop NetworkManager
systemctl disable NetworkManager
systemctl stop firewalld
systemctl disable firewalld
Теперь инсталлируем openvswitch и запускаем его. Она сам возьмет всю конфигурацию.
systemctl enable openvswitch.service
systemctl start openvswitch.service
Добавляем bridge и указываем через какой порт получаем сеть.
ovs-vsctl add-br br0
ovs-vsctl add-port br0 bond0
# ovs-vsctl show
7a0c9d14-3166-4173-8813-bb43a01e39f0
Bridge "br0"
Port "br0"
Interface "br0"
type: internal
Port "bond0"
Interface "bond0"
ovs_version: "2.3.1"
К сожалению это не все, нельзя использовать br0, так как он DOWN
9: br0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN
link/ether 8c:dc:d4:ac:dd:cc brd ff:ff:ff:ff:ff:ff
Значит надо обучить работать libvirt напрямую с ним. Создаем файоик (это разавая конфигурация, нужна только при установке)
# cat /etc/libvirt/my-ovsnet.xml
<network>
<name>ovs-br0</name>
<forward mode='bridge'/>
<bridge name='br0'/>
<virtualport type='openvswitch'/>
</network>
Показываем где файл
virsh net-define /etc/libvirt/my-ovsnet.xml
virsh net-list
virsh net-start ovs-br0
virsh net-autostart ovs-br0
Проверяем
# virsh net-list --all
Name State Autostart Persistent
----------------------------------------------------------
ovs-br0 active yes yes
Все. Можно инсталлировать. Так подается сеть через virsh-install
--network network=ovs-br0
А так в конфиге
<interface type='network'>
<mac address='52:54:00:b7:ae:99'/>
<source network='ovs-br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
15 23-07-2015 13:05:07
Тема: Правильные и удобные метрики (Graphite+Grafana+Collectd|Diamond) (0 ответов, оставленных в Linux)
Само собой это не единственное решение, но мне понравилось. Проблема только в том что нету нормального алертинга для всего этого дела. Есть проект seyren, но назвать его нормальным как-то язык не поворачивается.
Давайте поговорим о Graphite, Grafana, Collectd, Diamond, Carbon, Whisper, Apache. Вот пример как это все смотрится в реале. Это графики жизнедеятельности CEPH
Я тут покажу как просто и быстро можно создать нестандартные метрики на этой системе и если кому-то это будет интересно то опишу как это все настраивается.
Задача - показать рост OpenStack'a - это наш внутренний клауд.
Сам опенстак имеет достаточно удобный коммандлайновый интерфейс, api - полная опа! Вот она наша статистика, которую я хочу показать широкой общественности
$ nova hypervisor-stats
+----------------------+---------+
| Property | Value |
+----------------------+---------+
| count | 25 |
| current_workload | 7 |
| disk_available_least | 695206 |
| free_disk_gb | 1228026 |
| free_ram_mb | 1523170 |
| local_gb | 1247272 |
| local_gb_used | 19246 |
| memory_mb | 5649902 |
| memory_mb_used | 4126732 |
| running_vms | 357 |
| vcpus | 760 |
| vcpus_used | 1674 |
+----------------------+---------+
Отправлять в Carbon можно несколькими способами, на Debian мы используем Diamond, на Centos Collectd.
$ cat /etc/collectd/collectd.d/write_graphite.conf
LoadPlugin write_graphite
<Plugin write_graphite>
<Carbon>
Host "1.1.1.1"
Port "2003"
StoreRates true
AlwaysAppendDS false
EscapeCharacter "_"
</Carbon>
</Plugin>
А вот и "плугин" для отправки метрик, есть и другой способ, но этот быстрый, с условием что не надо отправлять часто метрики.
$ cat /etc/collectd/collectd.d/exec.conf
LoadPlugin exec
<Plugin exec>
Exec "nova" "/etc/collectd/sh/openstack.sh"
</Plugin>
Суть скрипта openstack.sh - выдать параметры в виде
PUTVAL server/openstack/key interval=XXX N:XXX
$ cat /etc/collectd/sh/openstack.sh
#!/bin/bash
HOSTNAME="${COLLECTD_HOSTNAME:-`hostname -f`}"
INTERVAL="${COLLECTD_INTERVAL:-60}"
export OS_USERNAME=xxx
export OS_PASSWORD=xxx
export OS_TENANT_NAME=xxx
export OS_AUTH_URL=http://2.2.2.2:35357/v2.0
while sleep "$INTERVAL"
do
TMP_K=""
TMP_V=""
declare -A arr
CMD=`/usr/bin/nova hypervisor-stats | grep -v '| Pro' | grep '|' | awk '{print ""$2"="$4}'`
while read line; do
TMP_K=`echo "$line" | cut -d "=" -sf 1`
TMP_V=`echo "$line" | cut -d "=" -sf 2-`
arr["$TMP_K"]=$TMP_V
done <<-EOL
$CMD
EOL
for key in ${!arr[@]}; do
echo "PUTVAL $HOSTNAME/openstack/${key} interval=$INTERVAL N:${arr[${key}]}"
done
unset arr
done
Все новые типы (ключи) должны быть описаны в Collectd.
$ diff /usr/share/collectd/types.db /usr/share/collectd/types.db_copy
192,204d191
<
< current_workload value:GAUGE:U:U
< memory_mb_used value:GAUGE:U:U
< free_ram_mb value:GAUGE:U:U
< running_vms value:GAUGE:U:U
< local_gb_used value:GAUGE:U:U
< count value:GAUGE:U:U
< vcpus value:GAUGE:U:U
< vcpus_used value:GAUGE:U:U
< free_disk_gb value:GAUGE:U:U
< local_gb value:GAUGE:U:U
< memory_mb value:GAUGE:U:U
< disk_available_least value:GAUGE:U:U
Метрики дошли до базы
Можно создавать графики, это делается очень просто, либо клик-клик-клик, либо просто пишем строку запроса
Все.
16 16-07-2015 00:44:11
Тема: Странность MySQL и Limit (0 ответов, оставленных в Базы данных)
Вот как можно написать интерпретатор чтобы такой запрос вообще прокатил?
mysql> (select host from db limit 1) limit 2;
+-----------+
| host |
+-----------+
| localhost |
| localhost |
+-----------+
2 rows in set (0.00 sec)
17 07-05-2015 12:21:26
Re: Помогите разобраться (3 ответов, оставленных в FreeBSD & BSD)
"ifconfig" на роутере и "netstat -ran" таблицу покажите, так же какой GW у пользователя на Win7 прописан?
18 07-05-2015 12:18:28
Re: Как из песочницы запустить иксы ? (2 ответов, оставленных в Linux)
Я даже не знаю как ответить, со звуком "у-лю-лю-лю-лю" наверное. Во общем какой вопрос, такой и ответ.
19 16-04-2015 18:06:54
Re: Найти процесс скрипта запущенный из браузера (3 ответов, оставленных в FreeBSD & BSD)
ps fauxwww покажите
20 23-02-2015 16:48:27
Re: Переадрисация (2 ответов, оставленных в Linux)
на 192.168.56.1 поднять nginx-proxy
21 06-02-2015 12:51:58
Re: Установка/Удаление Файлового менеджера mc (3 ответов, оставленных в FreeBSD & BSD)
Проверьте часы и дату. Так же есть ли файл и какие у него права "/usr/ports/devel/gmake". Какая у вас версия freebsd?
22 05-02-2015 13:51:39
Re: bash: поиск строк в файлах с исключениями (1 ответов, оставленных в Разное)
В корне неправильное решение! Вы найдете много того что является хорошим и не успеете обновлять списки. Получается что вы найдете всегда не 100% файлов, следовательно - задача не решена. Ну 100% никто не найдет но в любом случае это более правильно:
1. Берем любой антивирус (я пробовал drweb, clamav, maldet) и натравливаем его на все файлы, можно разбирать по типам и размеру, раз в неделю достаточно, задача не лечить, а именно найти.
2. ModSecurity работает в двух режимах, блокировки и нахождения, фиксирует непосредственно факт нелегальных операций. Так же как и антивирусы обновляется и поддерживает свои списки
3. DNSBL можно использовать как дополнительный фильтр, отбрасывать сети с плохой репутацией из стран которые не нужны для проекта.
23 19-01-2015 19:57:04
Re: Файлы Шрёдингера (2 ответов, оставленных в Linux)
Проверьте память.
24 09-12-2014 20:16:53
Re: Не подключается к share папке Windows автоматически. (3 ответов, оставленных в FreeBSD & BSD)
в rc.local
sleep 60 ; mount /net &
25 05-12-2014 23:56:50
Re: Не подключается к share папке Windows автоматически. (3 ответов, оставленных в FreeBSD & BSD)
Она монтируется до того как появляется сеть. Можно добавить noauto и "mount /net" в /etc/rc.local