Posts Tagged ‘ Monitoring

zabbix_agentd […]: unable to create mutex for log file

Нежданно-негаданно нарвался на такую ошибку при запуске zabbix-agent (v 2.4.5) в CentOS 7:

zabbix_agentd [50425]: unable to create mutex for log file
zabbix_agentd [50428]: cannot create Semaphore: [28] No space left on device

Решение простое как двери, нужно добавить SysV IPC semaphores.
Дефолтное значение выглядит так:

[admin@mx1 ~]$ sudo sysctl -a |grep sem
kernel.sem = 250    32000   32  128
[admin@mx1 ~]$

Для меня достаточно было сделать вот так:

[admin@mx1 ~]$ sudo sh -c 'echo "kernel.sem = 250 32000 32 256" > /etc/sysctl.d/10-zabbix.conf'
[admin@mx1 ~]$ sudo sysctl -p /etc/sysctl.d/10-zabbix.conf

И пробуем стартонуть …
Читать полностью

Simple Desktop Notifications Jira/Mail: Conky + Perl

На работе внедрили Jira — это такой мега продукт для управления проектами, тиками, багами он же вики и тд и тп … Я как админ там восновном работаю с тикетами которые на меня сыпятся со всех сторон. Но беда в том что софтина web-овская и для человека сидящего целыми днями в консоли не очень удобно держать отдельную вкладку с Jira в браузере и постоянно туда заглядывать. В Jira есть нотификейшены в почту, но опять же, почта web-овская: браузер -> вкладка -> смотреть-смотреть …. не удобно 🙂
Решил сделать себе няшную уведомлялку на десктоп для Jira (интересуют открытые тикеты назначенные на меня), а заодно и для почты (Интересует непрочитанные сообщения в директории INBOX) 🙂 Она же тоже вебовская … зараза.
Jira имеет очень богатый API, он же REST, через который можно совершать любые манипуляции с тикетами: создавать, комментировать, закрывать, переназначать … Но мне многого не надо, всего то отобразить на desktop количество заявок которые «висят на мне».
Есть готовые скрипты для работы с Jira использующие Jira REST. Варианты самые разнообразные как по функционалу так и по языкам: на ruby, python, perl. Я выбрал последний, так как более-менее ориентируюсь в перловке.

Если Jira работает по HTTPS (у нас именно так) то нужны библиотеки для работы с SSL. Их можно установить из репозиториев Linux, у себя в Debian 8 я сделал так:

# apt-get install libssl-dev

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

# cpan App::cpanminus​

Теперь установим модуль perl для работы с Jira:

# cpanm JIRA::REST

Все что нужно уже есть, можно создавать скриптик:

#!/usr/bin/env perl

use JIRA::REST;

   my $jira = JIRA::REST->new('https://jira.mycompany.ua', '_my_login_', '_jira_pass_here_');

# Iterate on issues
   my $search = $jira->POST('/search', undef, {
    jql        => 'assignee = "_my_login_" and status != "done"',
    startAt    => 0,
    maxResults => 10,
    fields     => [ qw/summary status assignee/ ],
   });

my $issues_counter = 0;

   foreach my $issue (@{$search->{issues}}) {
    ++$issues_counter;
   }

print "$issues_counter\n";

Сохраняем куда хотите и даем права на выполнение:

# chmod +x /home/some/path/jira_api.pl

Результатом его работы является целое десятичное число заявок которые назначены на _my_login_ и в состоянии «!= done»
Вот пример выполнения:

$ /home/some/path/jira_api.pl​
2
$​

Теперь для отображения на десктопе используем conky
Если не стоит, установим:

# apt-get install conky

Создаем конфиг, примеры можно найти в инете на любой вкус, у меня такой (второй скрипт относительно почты, я упоминал о том что почту тоже хочу мониторить):

# Conky settings #

background no
update_interval 5
double_buffer yes
no_buffers yes

# Window specifications #
own_window yes
own_window_type desktop
own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager
own_window_title
own_window_colour black
own_window_argb_visual yes
own_window_argb_value 200

minimum_size 200

# Alignment #
alignment br
gap_x 20
gap_y 50

border_inner_margin 15
border_outer_margin 0

# Graphics settings #
draw_shades no
draw_outline no
draw_borders no
draw_graph_borders no

# Text settings #
# Шрифт выбирайте на свой вкус
use_xft yes
xftalpha 0
xftfont Audiowide:size=10
#xftfont Open Sans Light:size=11

# Color scheme #
default_color 666666

color1 0099CC
color2 9933CC
color3 669900
color4 FF8800
color5 CC0000
color6 AAAAAA
color7 DDDDDD

TEXT
$font${color7}Jira Tickets: $font${color1}${execi 120 /home/some/path/jira_api.pl} $font${color7}|| $font${color7}Mail Inbox: $font${color1}${execi 120 /home/some/path/mail_imaps_v2.pl}

Вот листинг скрипта для отображения непрочитанных почтовых сообщений по IMAP (unread, INBOX). Скрипт не мой, нашелся гдето в инете:

#!/usr/bin/env perl

# gimap.pl by gxmsgx
# description: get the count of unread messages on imap

use strict;
use warnings;
use Mail::IMAPClient;
use IO::Socket::SSL;

my $username = 'my_email@company.ua';
my $password = '_my_mail_passwd_';

my $socket = IO::Socket::SSL->new(
  PeerAddr => 'webmail.company.ua',
  PeerPort => 993
 )
 or die "socket(): $@";

my $client = Mail::IMAPClient->new(
  Socket   => $socket,
  User     => $username,
  Password => $password,
 )
 or die "new(): $@";

if ($client->IsAuthenticated()) {
   my $msgct;

   $client->select("INBOX");
   $msgct = $client->unseen_count||'0';
   print "$msgct\n";
}

$client->logout();

И запускаем conky с такими параметрами:

$ conky -d -c /home/some/.conky_line

Получаем вот такой результат на десктопе в правом нижнем углу:
Conky - Jira and Mail

Не забудьте добавить в автостарт своего dm conky.

Хай щастить!

Zabbix 2.4 и JMX мониторинг Java приложений

Многие кто использует Java приложение знают о такой полезной штуке как JMX. Мне как администратору больше интересен JMX для мониторинга Java-приложений. Мониторим Zabbix-ом, он имеет поддержку JMX в виде отдельного интерфейса, правда для получения данных использует Java Gateway. Что это такое, как настроить … я дальше опишу.
Схема получения данных Zabbix-Server-ом от Java-app в конечном итоге будет выглядеть вот так:

                              / -> Java App1
Zabbix-Server -> Java Gateway --> Java App2
                              \ -> Java App3

Все три компонента могут быть как на одном хосте, так и на разных.
Мне как администратору проще воспринимать Zabbix Java Gateway как некий прокси, который преобразует данные полученные от JMX в формат данных Zabbix и отдает их в Zabbix Server.
Читать полностью

CentOS 6.6 — Puppet Dashboard Install

В одной из предыдущих статей я описал процесс установки и настройки Puppet Server (он же Puppetmaster). Сейчас же хочу написать небольшую заметку по установке и настройке Puppet Dashboard — это весьма приятное дополнение к Puppet. Представляет из себя WEB-консоль для мониторинга применения манифестов и визуализации конфигурации вцелом.
Устанавливать буду на том же сервере где настраивал Puppetmaster. Поехали?

Репозитарий Puppet Labs у меня уже добавлен, тем кто настраивает на отдельном сервере — его нужно добавить. Повторюсь на всяк случай:

puppet:~$ sudo rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm

Это не единственный необходимый репозиторий, забегая наперед скажу что нам нужен еще и mysql-server. Я предпочитаю mariadb вариант, но в официальных репах CentOS 6.6 он слегка «протухший», поэтому я добавил еще один репозитарий — для MariaDB. Если вас не напрягает протухлость mysql из оф реп CentOS — пропустите данный шаг. Итак, сначала создаем файлик /etc/yum.repos.d/mariadb-55.repo:

puppet:~$ sudo touch /etc/yum.repos.d/mariadb-55.repo

Открываем данный файл любым текстовым редактором (vi, vim, nano, mcedit …) и добавляем вот что:

# MariaDB 5.5 CentOS repository list - created 2015-03-30 10:48 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/5.5/centos6-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Теперь установим все необходимые пакеты:

puppet:~$ sudo yum install MariaDB-server puppet-dashboard

Все пакеты установлены, начинаем настройку. Начнем с mariadb.
Копируем заготовку конфига mysql:

puppet:~$ sudo cp /usr/share/mysql/my-medium.cnf /etc/my.cnf.d/server.cnf

Тюнинг mysql под разные задачи — это отдельная тема. В данном случае нам нужно только добавить вот такую опцию в конфиг /etc/my.cnf.d/server.cnf:

max_allowed_packet      = 32M

Добавляем в автозагрузку и стартуем сервис:

puppet:~$ sudo systemctl enable mariadb
puppet:~$ sudo systemctl start mariadb

Задаем пароль учетки root в mysql:

puppet:~$ sudo mysqladmin -u root password '_my_root_mysql_pass_here_'

Заходим в mysql и готовим базу:

puppet:~$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.41-MariaDB MariaDB Server

Copyright (c) 2000, 2014, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> CREATE DATABASE dashboard CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> CREATE USER 'dashboard'@'localhost' IDENTIFIED BY 'dash_pass_here';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> GRANT ALL PRIVILEGES ON dashboard.* TO 'puppet_dashboard'@'localhost';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> quit
Bye
puppet:~$

На этом MySQL можно считать подготовленным. Мы имеем базу, пользователя и пароль для базы.
Настройка подключения дашборда к этой базе:

puppet:~$ cd /usr/share/puppet-dashboard

Тут нас интересует файлик config/database.yml Это конфиг подключения Puppet Dashboard к MySQL DB. Заполняем согласно только что созданной БД ( проще говоря прописываем название, имя пользователя, пароль для подключения к базе mysql)
Меня интересует только секция produclion. Разработкой я заниматься не собираюсь, в любом случае добавить в будущем данные базы не составит труда.
Итак, что у меня получилось с данным конфигом:

production:
  database: dashboard
  username: dashboard
  password: dash_pass_here
  encoding: utf8
  adapter: mysql

Что дальше? Пробуем проинитить базу:

puppet:/usr/share/puppet-dashboard$ sudo -u puppet-dashboard rake RAILS_ENV=production db:migrate

Ха! Поймал ошибку! У меня mysql datadir не стандартный, поэтому вот (если у вас все стандартно — то команда отработает на ура, пропустите следующий шаг):

puppet:/usr/share/puppet-dashboard$ sudo -u puppet-dashboard rake RAILS_ENV=production db:migrate --trace
(in /usr/share/puppet-dashboard)
config.gem: Unpacked gem daemons-1.0.10 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem json_pure-1.7.7 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem factory_girl-1.3.3 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rdoc-3.6.1 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem haml-3.1.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rspec-rails-1.3.4 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem will_paginate-2.3.15 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem mocha-0.9.7 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rack-1.1.6 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem thoughtbot-shoulda-2.10.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rspec-1.3.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem sass-3.1.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:migrate
rake aborted!
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
/usr/share/puppet-dashboard/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:620:in `real_connect'
/usr/share/puppet-dashboard/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:620:in `connect'
/usr/share/puppet-dashboard/vendor/rails/activerecord/lib/active_record/connection_adapters/mysql_adapter.rb:203:in `initialize'
...

Пробуем прописать в конфиг … вот что:

production:
  database: dashboard
  username: dashboard
  password: dash_pass_here
  encoding: utf8
  adapter: mysql
  socket: /var/lib/mysql/data/mysql.sock

И еще раз init базы:

puppet:/usr/share/puppet-dashboard$ sudo -u puppet-dashboard rake RAILS_ENV=production db:migrate
(in /usr/share/puppet-dashboard)
.......
Preparing to delete from resource_events
2015-03-31 10:29:13: Deleting 0 orphaned records from resource_events
Deleting       100% |#########################################################################################################################| Time: 00:00:00

-- execute("ALTER TABLE reports ADD CONSTRAINT fk_reports_node_id FOREIGN KEY (node_id) REFERENCES nodes(id) ON DELETE CASCADE;")
   -> 0.0033s
-- execute("ALTER TABLE resource_events ADD CONSTRAINT fk_resource_events_resource_status_id FOREIGN KEY (resource_status_id) REFERENCES resource_statuses(id) ON DELETE CASCADE;")
   -> 0.0029s
-- execute("ALTER TABLE resource_statuses ADD CONSTRAINT fk_resource_statuses_report_id FOREIGN KEY (report_id) REFERENCES reports(id) ON DELETE CASCADE;")
   -> 0.0031s
-- execute("ALTER TABLE report_logs ADD CONSTRAINT fk_report_logs_report_id FOREIGN KEY (report_id) REFERENCES reports(id) ON DELETE CASCADE;")
   -> 0.0029s
-- execute("ALTER TABLE metrics ADD CONSTRAINT fk_metrics_report_id FOREIGN KEY (report_id) REFERENCES reports(id) ON DELETE CASCADE;")
   -> 0.0027s
==  AddReportForeignKeyConstraints: migrated (0.0304s) ========================

==  RemoveUrlFromNodes: migrating =============================================
-- remove_column(:nodes, :url)
   -> 0.0028s
==  RemoveUrlFromNodes: migrated (0.0030s) ====================================

** Invoke db:schema:dump (first_time)
** Invoke environment
** Execute db:schema:dump
puppet:/usr/share/puppet-dashboard$

Отработала командочка отлично!
Пробуем запустить сервис puppet-dashboard:

puppet:/usr/share/puppet-dashboard$ sudo service puppet-dashboard start
Starting Puppet Dashboard: config.gem: Unpacked gem daemons-1.0.10 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem json_pure-1.7.7 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem factory_girl-1.3.3 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rdoc-3.6.1 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem haml-3.1.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rspec-rails-1.3.4 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem will_paginate-2.3.15 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem mocha-0.9.7 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rack-1.1.6 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem thoughtbot-shoulda-2.10.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem rspec-1.3.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
config.gem: Unpacked gem sass-3.1.2 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
=> Booting WEBrick
=> Rails 2.3.17 application starting on http://0.0.0.0:3000            [  OK  ]
puppet:/usr/share/puppet-dashboard$

Поидее запустилась, слушается ли порт 3000?

puppet:/usr/share/puppet-dashboard$ sudo netstat -lnp |grep 3000
tcp        0      0 0.0.0.0:3000                0.0.0.0:*                   LISTEN      12269/ruby          
puppet:/usr/share/puppet-dashboard$

Слушается! Если есть firewall — добавляем правило для порта TCP/3000:

# Puppet Dashboard
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3000 -j ACCEPT

если нет просто пробуем браузером зайти на puppet-server порт 3000, в моем случае URL выглядит так: http://puppet.intranet:3000/
Должны увидеть вот что:

Puppet Dashboard - First Start

Как видим никакой статистики тут пока нет, все по нулям. Для того чтобы связать puppetserver и puppet agents/dashboard нужно подправить их конфиги.
1. На puppetmaster в конфиге /etc/puppet/puppet.conf, точнее в секции [master] указать:

[master]
    reports = store, http
    reporturl = http://puppet.intranet:3000/reports/upload

и перегрузить puppetmaster:

puppet:~$ sudo service puppetmaster restart

2. Еще перегрузим сервисы dashboard и puppet-dashboard-workers:

puppet:~$ sudo service puppet-dashboard-workers start
puppet:~$ sudo service puppet-dashboard restart

Не забываем добавить нужные сервисы в автозапуск:

puppet:~$ sudo chkconfig puppet-dashboard on
puppet:~$ sudo chkconfig puppet-dashboard-workers on

Теперь дополнительный параметр для puppet agent.
1. В конфиге /etc/puppet/puppet.conf, точнее в секции [agent] каждого puppet agent-a указываем:

[agent]
    report = true

2. перегружаем puppet agent:

agent01:~$ sudo service puppet restart
Stopping puppet agent:                                     [  OK  ]
Starting puppet agent:                                     [  OK  ]
agent01:~$

Ну вот, сервисы подстроили …
Пробуем зайти еще раз по URL http://puppet.intranet:3000/ Поидее увидим уже и кой какую статистику с добавленными нодами:

Puppet Dashboard - Working

Фух … радуемся 🙂

Хай щастить!

Zabbix — CPU Time & Memory Usage для процесса

Задача — мониторить zabbix-ом Memory и CPU Time Usage для конкретного процесса в Linux/Unix.
Больше конкретики …
Есть вот такой процесс:

black@linux9:~$ sudo ps aux |grep java
bioc 8607 40.4 1.2 11097680 418576 pts/0 Sl Feb25 423:27 /usr/java/jdk1.7.0_67/bin/java -classpath /opt/bioc/maven/boot/plexus-classworlds-2.4.jar -Dclassworlds.conf=/opt/bioc/maven/bin/m2.conf -Dmaven.home=/opt/bioc/maven org.codehaus.plexus.classworlds.launcher.Launcher tomcat7:run
black@linux9:~$

Как узнать сколько ресурсов он потребляет? И не просто узнать, но еще и запихнуть в zabbix для сбора статистики и накручивания триггеров.
Процессор!
CPU Time процесса — в дефолте Zabbix не умеет собирать агентом этот параметр. Но есть возможность написать свой UserParameter в конфиг zabbix-agent. Вот мой вариант:

UserParameter=proc.cputime.fc[*],CPUS=$$(grep -c ^processor /proc/cpuinfo); /bin/ps -A --no-headers -o user:16,cputime,args | /usr/bin/awk -v CPU_C="$$CPUS" 'BEGIN {SUM=0; SNAME="$3"; COMM="$2"; USER="$1"} {if (($$9 ~ SNAME || SNAME == "") && ($$3 ~ COMM || COMM == "") && ($$1 == USER || USER == "")) {d[1]=0; d[2]=0; split($$2, d,"-"); if (d[2] != 0) {split(d[2], t, ":"); SUM+=86400*d[1]+3600*t[1]+60*t[2]+t[3]} else {split($$2, t, ":"); SUM+=3600*t[1]+60*t[2]+t[3]}; }} END''{printf "%.1f", 100*SUM/CPU_C}'

На zabbix-server можно использовать Item «proc.cputime.fc» с дополнительными параметрами которые нужны для выборки awk:
USER=$1 — username, в моем случае «bioc»
COMM=$2 — command name, в моем случае «java»
SNAME=$3 — some unique parameter, в моем случае «tomcat7»
В моем случае это:

black@linux9:~$ /bin/ps -A --no-headers -o user:16,cputime,args |grep bioc |awk '{print $1,$3,$9}'
bioc /usr/java/jdk1.7.0_67/bin/java tomcat7:run
black@linux9:~$

Тоесть в моем конкретном случае Item выглядит так: proc.cputime.fc[bioc,java,tomcat7]

А что с памятью?
Поскольку я при настройке сервисов руководствуюсь правилом — один сервис на одного юзера, то в моем случае достаточно иметь Item для сбора использования памяти пользователем. В Zabbix версии 2.4 есть возможность получить от zabbix-client используемую память юзером, но к сожалению только VSZ. А я хочу еще и RSS! Тут опять поможет дополнительный UserParameter в zabbix-agent:

UserParameter=proc.mem.rss[*],/opt/zabbix/scripts/mem_ps_rss.pl "-p" "$1"

Он ведет к скрипту, а вот его листинг:

#!/usr/bin/perl
# Author: Tom Llewellyn-Smith
# Date: 10/12/2012
#
# Comment: simple perl script which sums all rss memory used by a given process (-p)
# tested on linux ps, easily modified to run with BSD ps.
#
# Copyright: © Onix Consulting Limited 2012-2012. All rights reserved.
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
use strict;
use warnings;
use Getopt::Std;

my $PS='/bin/ps';
my %opts;
getopts('h:p:', \%opts);
my $total_rss = 0;

sub usage
{
print "$0:\n\t-h displays this message\n\t-p [process name]\n";
exit 1;
}

unless ($opts{'p'})
{
# As a side-effect of not having -p set, -h also display help message.
&usage;
}

# Loop over all processes and add to total_rss counter if process matches regex.
foreach my $proc (`$PS -eF`)
{
if ($proc =~ /$opts{'p'}/)
{
my (undef,$pid,undef,undef,undef,$rss) = split(/\s+/,$proc);
# Do not include current script process as it will also match.
unless ($pid == $$)
{
$total_rss += $rss;
}
}
}

print $total_rss;

Этот скрипт был найден на просторах Интернета. Не помню менял я в нем чтото или нет …. Но суть не в том. Так что там с памятью? А вот что:
Memory Usage by Process (RSS) Item — proc.mem.rss[tomcat7]
Memory Usage by User (VSZ) Item — proc.mem[,bioc]

Мониторинг Docker контейнеров в Zabbix

Мониторить хочу количество контейнеров в состоянии Running/Crashed/Available. Для нескольких особо важных контейнеров нужно иметь возможность мониторить их статус по имени.
Что до количества, взял готовое решение вот тут. Добавил в Zabbix вот так:
Размещаем в /etc/zabbix/scripts такой вот скриптец под именем docker_status.sh:

#!/bin/bash
 
function countContainers() {
    docker ps -q $1 | wc -l
}
 
function countCrashedContainers() {
    docker ps -a | grep -v -F 'Exited (0)' | grep -c -F 'Exited ('
}
 
TYPE=${1-all}
 
case $TYPE in
    running) COUNT_FUNCTION="countContainers"; shift;;
    crashed) COUNT_FUNCTION="countCrashedContainers"; shift;;
    all) COUNT_FUNCTION="countContainers -a"; shift;;
esac
 
$COUNT_FUNCTION

В конфиг агента добавляем новый UserParameter:

...
UserParameter=docker.status[*],/etc/zabbix/scripts/docker_status.sh "$1"
...

Также необходимо добавить пользователя zabbix в группу docker:

sudo gpasswd --add zabbix docker

Ну и перегрузить zabbix-agent

sudo service zabbix-agent restart

Теперь с zabbix-server-а можно опробовать получение данных:

usr@zabbixsrv:~$ zabbix_get -s 100.10.100.10 -k docker.status[crashed]
0
usr@zabbixsrv:~$ zabbix_get -s 100.10.100.10 -k docker.status[all]
13
usr@zabbixsrv:~$ zabbix_get -s 100.10.100.10 -k docker.status[running]
6
usr@zabbixsrv:~$

Иногда наличие контейнеров в состоянии Crashed еще не показатель критического состояния системы, к примеру, когда «завалился» тестовый контейнер. Поэтому для меня было важно иметь возможность мониторить состояние нескольких конкретных контейнеров по имени. Эту проверку пришлось сооружать самому. Но особо ничего сложного, добавляем в zabbix-agent вот такой параметр:

UserParameter=docker.if.up[*],/usr/bin/docker ps |awk 'BEGIN { FS = "  +"; STATUS = "0"; DOCKER_NAME="$1" }; {if ( $$7 == DOCKER_NAME ) {if ( $$5 ~ "Up" ) STATUS = 1; else next;} else next; }; END''{print STATUS;}'

и перегружаем сервис zabbix-agent

sudo service zabbix-agent restart

Теперь используя ключ docker.if.up[имя_контейнера] мы можем узнать в состоянии «Up» он (вернется «1») или же состояние «не Up» (вернется «0»)
Попробуем спросить с забикс-сервера состояние конкретного контейнера:

usr@zabbixsrv:~$ zabbix_get -s 100.10.100.10 -k docker.if.up[vm3]
1
usr@zabbixsrv:~$ zabbix_get -s 100.10.100.10 -k docker.if.up[dev5]
0
usr@zabbixsrv:~$

Усе … осталось соорудить Template и добавить его к серверам с docker-ом
Вот для примера мой шаблон, в нем имя контейнера задается макросами «{$CONTAINER_NAME1}«, «{$CONTAINER_NAME2}» и тд, присваивайте на каждом хосте свои имена, лишние элементы данных для хоста можно деактивировать. Вцелом шаблон опробован — работает отлично!
Хай щастить!

Enjoy!

Установка Zabbix-agent 2.2 в Debian Squezee

В официальных репозитариях Debian Squezee есть zabbix версии 1.8 Я же хотел установить zabbix-agent хотя бы версии 2.0 Но оказалось что для Debian Squezee в репах Zabbix-а есть агент версии 2.2 Его я и буду ставить! Для начала качаем файлик с репозитарием:

black@deb5:~$ wget -c http://repo.zabbix.com/zabbix/2.2/debian/pool/main/z/zabbix-release/zabbix-release_2.2-1+squeeze_all.deb

И установим его:

black@deb5:~$ sudo dpkg -i zabbix-release_2.2-1+squeeze_all.deb
Selecting previously deselected package zabbix-release.
(Reading database ... 54804 files and directories currently installed.)
Unpacking zabbix-release (from zabbix-release_2.2-1+squeeze_all.deb) ...
Setting up zabbix-release (2.2-1+squeeze) ...
black@deb5:~$

Поехали дальше … Читать полностью

Nagios3 — Мониторим Bandwidth в ESX 5.x через SNMP

Расскажу и покажу как мониторить загруженность сетевых интерфейсов (bandwidth) в ESX версии 5.x через SNMP. К слову сказать, с помощью SNMP в ESX можно мониторить загрузку CPU, памяти, винтов и прочие параметры … но главное понять принцип как это делается, а дальше — дело техники! Для начала на серваке с ESX нужно включить SNMP. Не вижу смысла повторять героический подвиг и ваять скриншотики, вот тут коллеги уже прекрасно справились — тыц!
Итак, далее предполагаю что Nagios3 у вас уже установлен и настроен. Поехали дельше … Читать полностью

Мониторинг загрузки сетевого интерфейса на ESX сервере по SNMP

Сервис мониторинга Nagios3 у меня давно работает на сервере под Debian. Захотелось мне промониторить загрузку интерфейсов на серваке ESX 5. Оказалось это можно сделать по SNMP и довольно просто. Но всеже я это настраивал впервые, хочу поделиться с вами инфой и себе на заметку пригодится.
На сервер ESX зашел по SSH и подправил с помощью vi следующий файл до такого вида:

~ # cat /etc/vmware/snmp.xml
< ?xml version="1.0"?>
<config><snmpsettings><enable>true</enable><port>161</port><enveventsource>indications</enveventsource><loglevel>info</loglevel><communities>SRV1-ESXi</communities><targets></targets><engineid>00000063000000a17f000001</engineid></snmpsettings></config>
~ #

С сервера мониторинга пробуем опросить snmp Читать полностью

FreeBSD — S.M.A.R.T. на сервере HP

Захотелось вот смарты по винтам просмотреть, ато есть уже опыт с битым веником … Система FreeBSD 8.2, сервак HP
Для начала поставим тулзу для чтения S.M.A.R.T.

[root@mail ~]# cd /usr/ports/sysutils/smartmontools

Собираем

[root@mail /usr/ports/sysutils/smartmontools]# make install clean

Пользуем так:

[root@mail ~]# smartctl -d sat+cciss,0 -a /dev/ciss0

Это для первого винта, вот так для второго:

[root@mail ~]# smartctl -d sat+cciss,1 -a /dev/ciss0

Ну и тд и тп.
На основании данных полученных со смарта можно примерно представить сколько еще прослужит винчестер. Также рекомендую сделать скрипт для розпарсивания основных параметров и отсылки информации админу о проблеме любым доступным на сервере способом (SMS, Mail, SNMP)
Удачи!