https://amd.co.at/adminw/index.php?title=Special:Contributions&feed=atom&limit=50&target=Gullevek&year=&month=AdminWiki - User contributions [en]2024-03-29T11:31:13ZFrom AdminWikiMediaWiki 1.16.2https://amd.co.at/adminwiki/PostgreSQLPostgreSQL2011-05-18T08:31:21Z<p>Gullevek: /* Table Size */</p>
<hr />
<div><br />
= General =<br />
<br />
= Setup =<br />
<br />
== Storage ==<br />
<br />
As for every transactional database, disk I/O is the main limiting factor for PostgresSQL. If you plan to deploy a high-usage database please take some precautions on the used storage. Use either a RAID 1 or 10 and choose a FS that does fast block-IO (ext2).<br />
<br />
== Accounts and permissions ==<br />
<br />
When starting with a fresh database, you've to [http://www.postgresql.org/docs/current/interactive/user-manag.html create some users] first before you can start using it.<br />
<br />
Basic steps:<br />
<br />
<pre><br />
su - postgresql<br />
createuser -P <user><br />
createdb -O <user> <db><br />
</pre><br />
<br />
<br />
<br />
Also be sure to tune the [http://www.postgresql.org/docs/current/interactive/client-authentication.html pg_hba.conf] in the data-directory to your needs. To emulate MySQLs default "every user needs to authenticate from everywhere"-semantics use the following config:<br />
<br />
<pre><br />
local all all md5<br />
host all all 127.0.0.1/32 md5<br />
host all all ::1/128 md5 <br />
</pre><br />
<br />
= Performance and Tuning =<br />
<br />
== Sequential Scans ==<br />
<br />
If you're getting sequential scans despite having indexes and have run a <tt>vacuum analyze</tt> recently you might need to increase the [http://www.postgresql.org/docs/current/static/runtime-config-query.html#GUC-DEFAULT-STATISTICS-TARGET default_statistics_target].<br />
<br />
== max_fsm_* ==<br />
<br />
<br />
* http://www.varlena.com/GeneralBits/Tidbits/perf.html#maxfsmp<br />
* http://www.postgresql.org/docs/current/interactive/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-FSM<br />
<br />
== document me ==<br />
<br />
* sort_mem<br />
* shared_buffers<br />
<br />
= Maintenance =<br />
<br />
== Vacuuming ==<br />
<br />
=== What? ===<br />
<br />
Since PostgresSQL is a transactional database, old rows don't get actually removed/replaced when you update/delete them (since they might be still needed in older/long running transactions). To actually free them you need to issue a [http://www.postgresql.org/docs/current/interactive/maintenance.html vacuum].<br />
<br />
A normal vacuum will only mark deprecated rows for reuse, to actually reclaim diskspace (e.g. when having deleted large amounts of data) you need to issue a full vacuum. Please note that it might be faster to backup the data you want to keep and truncate the table if you plan to remove large portions of a table.<br />
<br />
=== autovacuum ===<br />
<br />
Check status of autovacuums in a given Database:<br />
<br />
<pre><br />
select relname,last_vacuum,last_autovacuum,last_analyze,last_autoanalyze from pg_stat_user_tables;<br />
</pre><br />
<br />
=== Transaction ID Wraparound ===<br />
<br />
A regularly run plain or "lazy" vacuum should prevent Transaction ID Wraparound in all cases, a full vacuum is not required.<br />
<br />
You can check your TXID counters with the following query:<br />
<br />
<pre><br />
SELECT datname, age(datfrozenxid) FROM pg_database;<br />
</pre><br />
<br />
If the age is noticeably higher than 1 Billion (2^30 or 1073741824 to be exact) after a recent vacuum something is probably not working as intended; if it should be anywhere near 2 billion you should take immediate action to prevent problems.<br />
<br />
* http://www.postgresql.org/docs/current/interactive/maintenance.html#VACUUM-FOR-WRAPAROUND<br />
<br />
== Fixing broken databases ==<br />
<br />
set zero_damaged_pages to on;<br />
vacuum;<br />
pray;<br />
<br />
== Table Size ==<br />
<br />
If you want to know which table in your database claims the most diskspace, here is a query that returns the size of the tables from the current database.<br />
<br />
''Note'': These examples assume that you use the default page size of 8kb.<br />
<br />
<br />
''relfilenode'' column holds the file name for this table / data. You can find it in the data directory from postgres (main/).<br><br />
The ''relkind'' column holds the type of the data and ''reltuples'' the count of rows in this table.<br />
<br />
<blockquote style="font-family: monospace; background-color:#F9F9F9; border:1px dashed #2F6FAB; color:black; line-height:1.1em; padding:1em;"><br />
SELECT relname, pg_size_pretty(relpages::bigint * 8 * 1024) as size, relkind, reltuples::bigint as rows, relpages, relfilenode FROM pg_class ORDER BY relpages DESC;<br />
</blockquote><br />
<br />
relnames starting with <tt>pg_toast</tt> are [http://www.postgresql.org/docs/current/interactive/storage-toast.html TOAST]-storage for large tables. Compare the appended number with the relfilenodes to get the associated table. <br />
<br />
If you have a lot of huge data, thre will be a lot of toast tables. With this query you get an additional field that shows the toast table name if this table has one, and the original table for each toast table:<br />
<br />
This works until PostgreSQL 9.0, see modified query below.<br />
<blockquote style="font-family: monospace; background-color:#F9F9F9; border:1px dashed #2F6FAB; color:black; line-height:1.1em; padding:1em;"><br />
SELECT relname, pg_size_pretty(relpages::bigint * 8 *1024) AS size, CASE WHEN relkind = 't' THEN (SELECT pgd.relname FROM pg_class pgd WHERE pgd.relfilenode::text = SUBSTRING(pg.relname FROM 10)) ELSE (SELECT pgc.relname FROM pg_class pgc WHERE pg.reltoastrelid = pgc.relfilenode) END AS refrelname, relfilenode, relkind, reltuples::bigint, relpages FROM pg_class pg ORDER BY relpages DESC;<br />
</blockquote><br />
<br />
example output:<br />
<br />
<pre><br />
relname | relfilenode | relkind | reltuples | relpages | relpages_kb<br />
-----------------------------------------+-------------+---------+-------------+----------+-------------<br />
pg_toast_16496 | 16499 | t | 6.74842e+06 | 1684158 | 13473264<br />
eintrag | 16510 | r | 3.97601e+06 | 271484 | 2171872<br />
admin_log | 16496 | r | 9.49351e+06 | 248608 | 1988864<br />
history | 16654 | r | 1.98684e+07 | 204714 | 1637712<br />
ctimes | 16695 | r | 1.36451e+07 | 189826 | 1518608<br />
</pre><br />
<br />
For PostgreSQL 9.0 the query below will work, it also adds some additional info for toast indexes:<br />
<blockquote style="font-family: monospace; background-color:#F9F9F9; border:1px dashed #2F6FAB; color:black; line-height:1.1em; padding:1em;"><br />
SELECT pgn.nspname, relname, pg_size_pretty(relpages::bigint * 8 * 1024) AS size, <br />
CASE WHEN relkind = 't' THEN <br />
(SELECT pgd.relname FROM pg_class pgd WHERE pgd.reltoastrelid = pg.oid) <br />
WHEN nspname = 'pg_toast' AND relkind = 'i' THEN<br />
(SELECT pgt.relname FROM pg_class pgt WHERE SUBSTRING(pgt.relname FROM 10) = REPLACE(SUBSTRING(pg.relname FROM 10), '_index', ''''''')) <br />
ELSE <br />
(SELECT pgc.relname FROM pg_class pgc WHERE pg.reltoastrelid = pgc.oid) <br />
END::varchar AS refrelname, <br />
CASE WHEN nspname = 'pg_toast' AND relkind = 'i' THEN<br />
(SELECT pgts.relname FROM pg_class pgts WHERE pgts.reltoastrelid = (SELECT pgt.oid FROM pg_class pgt WHERE SUBSTRING(pgt.relname FROM 10) = REPLACE(SUBSTRING(pg.relname FROM 10), '_index', '''''''))) <br />
END AS relidxrefrelname, <br />
relfilenode, relkind, reltuples::bigint, relpages <br />
FROM pg_class pg, pg_namespace pgn WHERE pg.relnamespace = pgn.oid <br />
AND pgn.nspname NOT IN ('information_schema', 'pg_catalog') <br />
ORDER BY relpages DESC;<br />
</blockquote><br />
<br />
Sample output:<br />
<br />
<pre><br />
nspname | relname | size | refrelname | relidxrefrelname | relfilenode | relkind | reltuples | relpages <br />
----------+--------------------------------------------------------------+------------+----------------------------+----------------------------+-------------+---------+-----------+----------<br />
pg_toast | pg_toast_12633551 | 12 GB | error_email_collect | | 16113687 | t | 6506013 | 1532166<br />
public | log_email_sent | 4394 MB | pg_toast_12633624 | | 16112041 | r | 28645328 | 562416<br />
public | mail_log | 3260 MB | pg_toast_12633661 | | 16113649 | r | 13556149 | 417328<br />
public | error_email_collect | 1003 MB | pg_toast_12633551 | | 16113684 | r | 1161103 | 128345<br />
public | log_hash_reference | 789 MB | pg_toast_12633642 | | 18241270 | r | 7046247 | 100960<br />
public | email | 504 MB | pg_toast_12633482 | | 16111750 | r | 3673276 | 64568<br />
public | log_email_sent_log_id_idx | 492 MB | | | 16112048 | i | 28684712 | 62947<br />
public | log_email_sent_pkey | 492 MB | | | 16112047 | i | 28684712 | 62947<br />
public | idx_mail_log_date_created | 291 MB | | | 16113677 | i | 13563234 | 37192<br />
public | mail_log_pkey | 233 MB | | | 16113655 | i | 13563234 | 29765<br />
pg_toast | pg_toast_12633551_index | 139 MB | pg_toast_12633551 | error_email_collect | 16113689 | i | 6506013 | 17840<br />
</pre><br />
<br />
relidxrefrelname is the original table on which the toast table is based for an toast index<br />
<br />
More about admin functions regarding databasize and table size can be found in the [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE System Admin Functions] under the Table 9-48.<br />
<br />
== Cancelling queries ==<br />
<br />
To gracefully cancel queries, one can use [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE pg_cancel_backend()]. This should be safer than SIGTERMing the according process.<br />
<br />
= Accessing the Database =<br />
<br />
== psql and other CLI programs ==<br />
<br />
=== psql password prompts ===<br />
<br />
psql has, unlike the mysql client, no option to supply a password on the command line (which would be insecure). There are two solutions for this problem:<br />
<br />
* environment variables:<br />
export PGPASSWORD=password<br />
export PGUSER=username<br />
export PGHOST=host<br />
<br />
* a <tt>~/.pgpass</tt> file<br />
<br />
[http://www.postgresql.org/docs/current/static/libpq-pgpass.html pgpass Documentation]<br />
<br />
Format:<br />
hostname:port:database:username:password</div>Gullevekhttps://amd.co.at/adminwiki/PostgreSQLPostgreSQL2011-05-18T08:30:33Z<p>Gullevek: /* Table Size */</p>
<hr />
<div><br />
= General =<br />
<br />
= Setup =<br />
<br />
== Storage ==<br />
<br />
As for every transactional database, disk I/O is the main limiting factor for PostgresSQL. If you plan to deploy a high-usage database please take some precautions on the used storage. Use either a RAID 1 or 10 and choose a FS that does fast block-IO (ext2).<br />
<br />
== Accounts and permissions ==<br />
<br />
When starting with a fresh database, you've to [http://www.postgresql.org/docs/current/interactive/user-manag.html create some users] first before you can start using it.<br />
<br />
Basic steps:<br />
<br />
<pre><br />
su - postgresql<br />
createuser -P <user><br />
createdb -O <user> <db><br />
</pre><br />
<br />
<br />
<br />
Also be sure to tune the [http://www.postgresql.org/docs/current/interactive/client-authentication.html pg_hba.conf] in the data-directory to your needs. To emulate MySQLs default "every user needs to authenticate from everywhere"-semantics use the following config:<br />
<br />
<pre><br />
local all all md5<br />
host all all 127.0.0.1/32 md5<br />
host all all ::1/128 md5 <br />
</pre><br />
<br />
= Performance and Tuning =<br />
<br />
== Sequential Scans ==<br />
<br />
If you're getting sequential scans despite having indexes and have run a <tt>vacuum analyze</tt> recently you might need to increase the [http://www.postgresql.org/docs/current/static/runtime-config-query.html#GUC-DEFAULT-STATISTICS-TARGET default_statistics_target].<br />
<br />
== max_fsm_* ==<br />
<br />
<br />
* http://www.varlena.com/GeneralBits/Tidbits/perf.html#maxfsmp<br />
* http://www.postgresql.org/docs/current/interactive/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-FSM<br />
<br />
== document me ==<br />
<br />
* sort_mem<br />
* shared_buffers<br />
<br />
= Maintenance =<br />
<br />
== Vacuuming ==<br />
<br />
=== What? ===<br />
<br />
Since PostgresSQL is a transactional database, old rows don't get actually removed/replaced when you update/delete them (since they might be still needed in older/long running transactions). To actually free them you need to issue a [http://www.postgresql.org/docs/current/interactive/maintenance.html vacuum].<br />
<br />
A normal vacuum will only mark deprecated rows for reuse, to actually reclaim diskspace (e.g. when having deleted large amounts of data) you need to issue a full vacuum. Please note that it might be faster to backup the data you want to keep and truncate the table if you plan to remove large portions of a table.<br />
<br />
=== autovacuum ===<br />
<br />
Check status of autovacuums in a given Database:<br />
<br />
<pre><br />
select relname,last_vacuum,last_autovacuum,last_analyze,last_autoanalyze from pg_stat_user_tables;<br />
</pre><br />
<br />
=== Transaction ID Wraparound ===<br />
<br />
A regularly run plain or "lazy" vacuum should prevent Transaction ID Wraparound in all cases, a full vacuum is not required.<br />
<br />
You can check your TXID counters with the following query:<br />
<br />
<pre><br />
SELECT datname, age(datfrozenxid) FROM pg_database;<br />
</pre><br />
<br />
If the age is noticeably higher than 1 Billion (2^30 or 1073741824 to be exact) after a recent vacuum something is probably not working as intended; if it should be anywhere near 2 billion you should take immediate action to prevent problems.<br />
<br />
* http://www.postgresql.org/docs/current/interactive/maintenance.html#VACUUM-FOR-WRAPAROUND<br />
<br />
== Fixing broken databases ==<br />
<br />
set zero_damaged_pages to on;<br />
vacuum;<br />
pray;<br />
<br />
== Table Size ==<br />
<br />
If you want to know which table in your database claims the most diskspace, here is a query that returns the size of the tables from the current database.<br />
<br />
''Note'': These examples assume that you use the default page size of 8kb.<br />
<br />
<br />
''relfilenode'' column holds the file name for this table / data. You can find it in the data directory from postgres (main/).<br><br />
The ''relkind'' column holds the type of the data and ''reltuples'' the count of rows in this table.<br />
<br />
<blockquote style="font-family: monospace; background-color:#F9F9F9; border:1px dashed #2F6FAB; color:black; line-height:1.1em; padding:1em;"><br />
SELECT relname, pg_size_pretty(relpages::bigint * 8 * 1024) as size, relkind, reltuples::bigint as rows, relpages, relfilenode FROM pg_class ORDER BY relpages DESC;<br />
</blockquote><br />
<br />
relnames starting with <tt>pg_toast</tt> are [http://www.postgresql.org/docs/current/interactive/storage-toast.html TOAST]-storage for large tables. Compare the appended number with the relfilenodes to get the associated table. <br />
<br />
If you have a lot of huge data, thre will be a lot of toast tables. With this query you get an additional field that shows the toast table name if this table has one, and the original table for each toast table:<br />
<br />
This works until PostgreSQL 9.0, see modified query below.<br />
<blockquote style="font-family: monospace; background-color:#F9F9F9; border:1px dashed #2F6FAB; color:black; line-height:1.1em; padding:1em;"><br />
SELECT relname, pg_size_pretty(relpages::bigint * 8 *1024) AS size, CASE WHEN relkind = 't' THEN (SELECT pgd.relname FROM pg_class pgd WHERE pgd.relfilenode::text = SUBSTRING(pg.relname FROM 10)) ELSE (SELECT pgc.relname FROM pg_class pgc WHERE pg.reltoastrelid = pgc.relfilenode) END AS refrelname, relfilenode, relkind, reltuples::bigint, relpages FROM pg_class pg ORDER BY relpages DESC;<br />
</blockquote><br />
<br />
example output:<br />
<br />
<pre><br />
relname | relfilenode | relkind | reltuples | relpages | relpages_kb<br />
-----------------------------------------+-------------+---------+-------------+----------+-------------<br />
pg_toast_16496 | 16499 | t | 6.74842e+06 | 1684158 | 13473264<br />
eintrag | 16510 | r | 3.97601e+06 | 271484 | 2171872<br />
admin_log | 16496 | r | 9.49351e+06 | 248608 | 1988864<br />
history | 16654 | r | 1.98684e+07 | 204714 | 1637712<br />
ctimes | 16695 | r | 1.36451e+07 | 189826 | 1518608<br />
</pre><br />
<br />
For PostgreSQL 9.0 the query below will work, it also adds some additional info for toast indexes:<br />
<blockquote style="font-family: monospace; background-color:#F9F9F9; border:1px dashed #2F6FAB; color:black; line-height:1.1em; padding:1em;"><br />
SELECT pgn.nspname, relname, pg_size_pretty(relpages::bigint * 8 * 1024) AS size, <br />
CASE WHEN relkind = 't' THEN <br />
(SELECT pgd.relname FROM pg_class pgd WHERE pgd.reltoastrelid = pg.oid) <br />
WHEN nspname = 'pg_toast' AND relkind = 'i' THEN<br />
(SELECT pgt.relname FROM pg_class pgt WHERE SUBSTRING(pgt.relname FROM 10) = REPLACE(SUBSTRING(pg.relname FROM 10), '_index', ''''''')) <br />
ELSE <br />
(SELECT pgc.relname FROM pg_class pgc WHERE pg.reltoastrelid = pgc.oid) <br />
END::varchar AS refrelname, <br />
CASE WHEN nspname = 'pg_toast' AND relkind = 'i' THEN<br />
(SELECT pgts.relname FROM pg_class pgts WHERE pgts.reltoastrelid = (SELECT pgt.oid FROM pg_class pgt WHERE SUBSTRING(pgt.relname FROM 10) = REPLACE(SUBSTRING(pg.relname FROM 10), '_index', ''))) <br />
END AS relidxrefrelname, <br />
relfilenode, relkind, reltuples::bigint, relpages <br />
FROM pg_class pg, pg_namespace pgn WHERE pg.relnamespace = pgn.oid <br />
AND pgn.nspname NOT IN ('information_schema', 'pg_catalog') <br />
ORDER BY relpages DESC;<br />
</blockquote><br />
<br />
Sample output:<br />
<br />
<pre><br />
nspname | relname | size | refrelname | relidxrefrelname | relfilenode | relkind | reltuples | relpages <br />
----------+--------------------------------------------------------------+------------+----------------------------+----------------------------+-------------+---------+-----------+----------<br />
pg_toast | pg_toast_12633551 | 12 GB | error_email_collect | | 16113687 | t | 6506013 | 1532166<br />
public | log_email_sent | 4394 MB | pg_toast_12633624 | | 16112041 | r | 28645328 | 562416<br />
public | mail_log | 3260 MB | pg_toast_12633661 | | 16113649 | r | 13556149 | 417328<br />
public | error_email_collect | 1003 MB | pg_toast_12633551 | | 16113684 | r | 1161103 | 128345<br />
public | log_hash_reference | 789 MB | pg_toast_12633642 | | 18241270 | r | 7046247 | 100960<br />
public | email | 504 MB | pg_toast_12633482 | | 16111750 | r | 3673276 | 64568<br />
public | log_email_sent_log_id_idx | 492 MB | | | 16112048 | i | 28684712 | 62947<br />
public | log_email_sent_pkey | 492 MB | | | 16112047 | i | 28684712 | 62947<br />
public | idx_mail_log_date_created | 291 MB | | | 16113677 | i | 13563234 | 37192<br />
public | mail_log_pkey | 233 MB | | | 16113655 | i | 13563234 | 29765<br />
pg_toast | pg_toast_12633551_index | 139 MB | pg_toast_12633551 | error_email_collect | 16113689 | i | 6506013 | 17840<br />
</pre><br />
<br />
relidxrefrelname is the original table on which the toast table is based for an toast index<br />
<br />
More about admin functions regarding databasize and table size can be found in the [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE System Admin Functions] under the Table 9-48.<br />
<br />
== Cancelling queries ==<br />
<br />
To gracefully cancel queries, one can use [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE pg_cancel_backend()]. This should be safer than SIGTERMing the according process.<br />
<br />
= Accessing the Database =<br />
<br />
== psql and other CLI programs ==<br />
<br />
=== psql password prompts ===<br />
<br />
psql has, unlike the mysql client, no option to supply a password on the command line (which would be insecure). There are two solutions for this problem:<br />
<br />
* environment variables:<br />
export PGPASSWORD=password<br />
export PGUSER=username<br />
export PGHOST=host<br />
<br />
* a <tt>~/.pgpass</tt> file<br />
<br />
[http://www.postgresql.org/docs/current/static/libpq-pgpass.html pgpass Documentation]<br />
<br />
Format:<br />
hostname:port:database:username:password</div>Gullevekhttps://amd.co.at/adminwiki/DebianDebian2007-11-16T04:58:30Z<p>Gullevek: added debsum</p>
<hr />
<div>= Evaluation =<br />
<br />
Pro-contra<br />
<br />
= Tips and tricks =<br />
<br />
== How can I verify the integrity of an installation? ==<br />
<br />
If you're in doubt of the file integrity of an installation, this oneliner can give you a rough estimate of the damage done to the files managed by debian.<br />
<br />
cd /; md5sum -c /var/lib/dpkg/info/*.md5sums | grep -v "OK$"<br />
<br />
In case this doesn't work with your md5sum version, you can use this hackaround:<br />
<br />
for i in `ls /var/lib/dpkg/info/*.md5sums`; do md5sum.textutils -c $i | grep -v "OK$" ; done<br />
<br />
== apt/dpkg ==<br />
<br />
=== How do I check what version package $x gets upgraded to? ===<br />
<br />
apt-cache policy <package><br />
<br />
=== How can I check by which package a file is owned? ===<br />
<br />
dpkg -S <file><br />
<br />
=== How can I install packages from unstable in testing? Apt-Pinning ===<br />
<br />
apt-pinning is the answer.<br />
<br />
You have to edit or create those configuration files<br />
* /etc/apt/sources<br />
* /etc/apt/apt.conf<br />
* /etc/apt/preferences<br />
<br />
In ''/etc/apt/sources/'' add the other distributions you want to use. For example if you are in testing, add the same entries with unstable or higher.<br />
<br />
# testing<br />
deb http://ftp.debian.org/debian/ testing main contrib<br />
deb-src http://ftp.debian.org/debian/ testing main contrib<br />
# unstable<br />
deb http://ftp.debian.org/debian/ unstable main contrib<br />
deb-src http://ftp.debian.org/debian/ unstable main contrib<br />
# experimental<br />
deb http://ftp.debian.org/debian/ experimental main contrib<br />
deb-src http://ftp.debian.org/debian/ experimental main contrib<br />
<br />
In ''/etc/apt/apt.conf'' set a higher cache limit for apt-get so it doesn't run out of memory during updates. Second it is good to set your default release here too, so apt doesn't try to get packages from the other trees.<br />
<br />
APT::Cache-Limit "141942904";<br />
APT::Default-Release "testing";<br />
<br />
In ''/etc/apt/preferences'' add the higher trees with a lower Priority so they do not overwrite your basic packages from your main tree.<br />
<br />
# testing<br />
Package: *<br />
Pin: release a=testing<br />
Pin-Priority: 650<br />
# unstable<br />
Package: *<br />
Pin: release a=unstable<br />
Pin-Priority: 600<br />
# experimental<br />
Package: *<br />
Pin: release b=experimental<br />
Pin-Priority: 550<br />
<br />
In case you want to have a certain package from eg unstable overrule the testing package, add a new entry like this<br />
<br />
Package: mutt<br />
Pin: release a=unstable<br />
Pin-Priority: 700<br />
<br />
To install packages there are two ways. One is to try to install just the package, and the other way is to install all the packages and also the ones needed to satisfy its dependencies. The second choice is of course more dangerous because it can overwrite important libraries and make your system unstable.<br />
<br />
to install just the package:<br />
<br />
apt-get install <package>/<tree><br />
<br />
to install the package and all needed dependencies:<br />
<br />
apt-get -t <tree> install <package><br />
<br />
''<tree>'' stands for the release, eg ''testing'', ''unstable'', ...<br />
<br />
to see from which tree a package is installed install and use the too apt-show-versions. This package will also tell you if a package is uptodate or upgardable<br />
<br />
apt-show-versions -a -p <package><br />
<br />
''more information:''<br />
<br />
http://jaqque.sbih.org/kplug/apt-pinning.html<br />
<br />
=== Install missing keys for apt-get ===<br />
<br />
you have to had gpg run at least one time before, or it will not work.<br />
<br />
to get the gpg key<br />
<br />
gpg --recv-keys <key><br />
<br />
and then import them into the apt-key system<br />
<br />
gpg --export --armor | apt-key add -<br />
<br />
you can also directly download and install the key<br />
<br />
wget http://host.domain.com/keyname.asc -O - | apt-key add -<br />
<br />
=== Disable pdiffs ===<br />
<br />
To disable pdiffs add<br />
<br />
<tt>Acquire::PDiffs "false";</tt><br />
<br />
to your /etc/apt/apt.conf<br />
<br />
=== debsums ===<br />
<br />
Essential tool and should be installed on all debian boxes immediatly after the basic setup.<br />
<br />
It helps detect changed or modified packages, especially needed after a recovery from a filesystem error (to find broken binary files) or after a security breach to find possible changed binary files.<br />
<br />
basically you run it:<br />
debsusm -c<br />
this will show all changed packages.<br />
to be more detailed, and also include config files in /etc - which might have changed anyway - you can add the -a flag<br />
debsums -c -a<br />
<br />
to list packages with missing sums (eg self compiled, hand installed, etc)<br />
debsums -l<br />
you can then generate a debsum with -g flag. please see the man page for this.</div>Gullevekhttps://amd.co.at/adminwiki/DebianDebian2007-11-16T04:56:57Z<p>Gullevek: /* How can I install packages from unstable in testing? Apt-Pinning */</p>
<hr />
<div>= Evaluation =<br />
<br />
Pro-contra<br />
<br />
= Tips and tricks =<br />
<br />
== How can I verify the integrity of an installation? ==<br />
<br />
If you're in doubt of the file integrity of an installation, this oneliner can give you a rough estimate of the damage done to the files managed by debian.<br />
<br />
cd /; md5sum -c /var/lib/dpkg/info/*.md5sums | grep -v "OK$"<br />
<br />
In case this doesn't work with your md5sum version, you can use this hackaround:<br />
<br />
for i in `ls /var/lib/dpkg/info/*.md5sums`; do md5sum.textutils -c $i | grep -v "OK$" ; done<br />
<br />
== apt/dpkg ==<br />
<br />
=== How do I check what version package $x gets upgraded to? ===<br />
<br />
apt-cache policy <package><br />
<br />
=== How can I check by which package a file is owned? ===<br />
<br />
dpkg -S <file><br />
<br />
=== How can I install packages from unstable in testing? Apt-Pinning ===<br />
<br />
apt-pinning is the answer.<br />
<br />
You have to edit or create those configuration files<br />
* /etc/apt/sources<br />
* /etc/apt/apt.conf<br />
* /etc/apt/preferences<br />
<br />
In ''/etc/apt/sources/'' add the other distributions you want to use. For example if you are in testing, add the same entries with unstable or higher.<br />
<br />
# testing<br />
deb http://ftp.debian.org/debian/ testing main contrib<br />
deb-src http://ftp.debian.org/debian/ testing main contrib<br />
# unstable<br />
deb http://ftp.debian.org/debian/ unstable main contrib<br />
deb-src http://ftp.debian.org/debian/ unstable main contrib<br />
# experimental<br />
deb http://ftp.debian.org/debian/ experimental main contrib<br />
deb-src http://ftp.debian.org/debian/ experimental main contrib<br />
<br />
In ''/etc/apt/apt.conf'' set a higher cache limit for apt-get so it doesn't run out of memory during updates. Second it is good to set your default release here too, so apt doesn't try to get packages from the other trees.<br />
<br />
APT::Cache-Limit "141942904";<br />
APT::Default-Release "testing";<br />
<br />
In ''/etc/apt/preferences'' add the higher trees with a lower Priority so they do not overwrite your basic packages from your main tree.<br />
<br />
# testing<br />
Package: *<br />
Pin: release a=testing<br />
Pin-Priority: 650<br />
# unstable<br />
Package: *<br />
Pin: release a=unstable<br />
Pin-Priority: 600<br />
# experimental<br />
Package: *<br />
Pin: release b=experimental<br />
Pin-Priority: 550<br />
<br />
In case you want to have a certain package from eg unstable overrule the testing package, add a new entry like this<br />
<br />
Package: mutt<br />
Pin: release a=unstable<br />
Pin-Priority: 700<br />
<br />
To install packages there are two ways. One is to try to install just the package, and the other way is to install all the packages and also the ones needed to satisfy its dependencies. The second choice is of course more dangerous because it can overwrite important libraries and make your system unstable.<br />
<br />
to install just the package:<br />
<br />
apt-get install <package>/<tree><br />
<br />
to install the package and all needed dependencies:<br />
<br />
apt-get -t <tree> install <package><br />
<br />
''<tree>'' stands for the release, eg ''testing'', ''unstable'', ...<br />
<br />
to see from which tree a package is installed install and use the too apt-show-versions. This package will also tell you if a package is uptodate or upgardable<br />
<br />
apt-show-versions -a -p <package><br />
<br />
''more information:''<br />
<br />
http://jaqque.sbih.org/kplug/apt-pinning.html<br />
<br />
=== Install missing keys for apt-get ===<br />
<br />
you have to had gpg run at least one time before, or it will not work.<br />
<br />
to get the gpg key<br />
<br />
gpg --recv-keys <key><br />
<br />
and then import them into the apt-key system<br />
<br />
gpg --export --armor | apt-key add -<br />
<br />
you can also directly download and install the key<br />
<br />
wget http://host.domain.com/keyname.asc -O - | apt-key add -<br />
<br />
=== Disable pdiffs ===<br />
<br />
To disable pdiffs add<br />
<br />
<tt>Acquire::PDiffs "false";</tt><br />
<br />
to your /etc/apt/apt.conf</div>Gullevekhttps://amd.co.at/adminwiki/PostgreSQLPostgreSQL2007-11-15T22:54:47Z<p>Gullevek: /* Table Size */</p>
<hr />
<div>= General =<br />
<br />
= Setup =<br />
<br />
== Storage ==<br />
<br />
As for every transactional database, disk I/O is the main limiting factor for PostgresSQL. If you plan to deploy a high-usage database please take some precautions on the used storage. Use either a RAID 1 or 10 and choose a FS that does fast block-IO (ext2).<br />
<br />
== Accounts and permissions ==<br />
<br />
When starting with a fresh database, you've to [http://www.postgresql.org/docs/current/interactive/user-manag.html create some users] first before you can start using it.<br />
<br />
Basic steps:<br />
<br />
<pre><br />
su - postgresql<br />
createuser -P <user><br />
createdb -O <user> <db><br />
</pre><br />
<br />
<br />
<br />
Also be sure to tune the [http://www.postgresql.org/docs/current/interactive/client-authentication.html pg_hba.conf] in the data-directory to your needs. To emulate MySQLs default "every user needs to authenticate from everywhere"-semantics use the following config:<br />
<br />
<pre><br />
local all all md5<br />
host all all 127.0.0.1/32 md5<br />
host all all ::1/128 md5 <br />
</pre><br />
<br />
= Performance and Tuning =<br />
<br />
== Sequential Scans ==<br />
<br />
If you're getting sequential scans despite having indexes and have run a <tt>vacuum analyze</tt> recently you might need to increase the [http://www.postgresql.org/docs/current/static/runtime-config-query.html#GUC-DEFAULT-STATISTICS-TARGET default_statistics_target].<br />
<br />
== max_fsm_* ==<br />
<br />
<br />
* http://www.varlena.com/GeneralBits/Tidbits/perf.html#maxfsmp<br />
* http://www.postgresql.org/docs/current/interactive/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-FSM<br />
<br />
== document me ==<br />
<br />
* sort_mem<br />
* shared_buffers<br />
<br />
= Maintenance =<br />
<br />
== Vacuuming ==<br />
<br />
=== What? ===<br />
<br />
Since PostgresSQL is a transactional database, old rows don't get actually removed/replaced when you update/delete them (since they might be still needed in older/long running transactions). To actually free them you need to issue a [http://www.postgresql.org/docs/current/interactive/maintenance.html vacuum].<br />
<br />
A normal vacuum will only mark deprecated rows for reuse, to actually reclaim diskspace (e.g. when having deleted large amounts of data) you need to issue a full vacuum. Please note that it might be faster to backup the data you want to keep and truncate the table if you plan to remove large portions of a table.<br />
<br />
=== autovacuum ===<br />
<br />
Check status of autovacuums in a given Database:<br />
<br />
<pre><br />
select relname,last_vacuum,last_autovacuum,last_analyze,last_autoanalyze from pg_stat_user_tables;<br />
</pre><br />
<br />
=== Transaction ID Wraparound ===<br />
<br />
A regularly run plain or "lazy" vacuum should prevent Transaction ID Wraparound in all cases, a full vacuum is not required.<br />
<br />
You can check your TXID counters with the following query:<br />
<br />
<pre><br />
SELECT datname, age(datfrozenxid) FROM pg_database;<br />
</pre><br />
<br />
If the age is noticeably higher than 1 Billion (2^30 or 1073741824 to be exact) after a recent vacuum something is probably not working as intended; if it should be anywhere near 2 billion you should take immediate action to prevent problems.<br />
<br />
* http://www.postgresql.org/docs/current/interactive/maintenance.html#VACUUM-FOR-WRAPAROUND<br />
<br />
== Fixing broken databases ==<br />
<br />
set zero_damaged_pages to on;<br />
vacuum;<br />
pray;<br />
<br />
== Table Size ==<br />
<br />
If you want to know which table in your database claims the most diskspace, here is a query that returns the size of the tables from the current database.<br />
<br />
''Note'': These examples assume that you use the default page size of 8kb.<br />
<br />
<br />
''relfilenode'' column holds the file name for this table / data. You can find it in the data directory from postgres (main/).<br><br />
The ''relkind'' column holds the type of the data and ''reltuples'' the count of rows in this table.<br />
<br />
<blockquote style="font-family: monospace; background-color:#F9F9F9; border:1px dashed #2F6FAB; color:black; line-height:1.1em; padding:1em;"><br />
SELECT relname, pg_size_pretty(relpages::bigint * 8 * 1024) as size, relkind, reltuples::bigint as rows, relpages, relfilenode FROM pg_class ORDER BY relpages DESC;<br />
</blockquote><br />
<br />
relnames starting with <tt>pg_toast</tt> are [http://www.postgresql.org/docs/current/interactive/storage-toast.html TOAST]-storage for large tables. Compare the appended number with the relfilenodes to get the associated table. <br />
<br />
If you have a lot of huge data, thre will be a lot of toast tables. With this query you get an additional field that shows the toast table name if this table has one, and the original table for each toast table:<br />
<br />
<blockquote style="font-family: monospace; background-color:#F9F9F9; border:1px dashed #2F6FAB; color:black; line-height:1.1em; padding:1em;"><br />
SELECT relname, pg_size_pretty(relpages::bigint * 8 *1024) AS size, CASE WHEN relkind = 't' THEN (SELECT pgd.relname FROM pg_class pgd WHERE pgd.relfilenode = SUBSTRING(pg.relname FROM 10)) ELSE (SELECT pgc.relname FROM pg_class pgc WHERE pg.reltoastrelid = pgc.relfilenode) END AS refrelname, relfilenode, relkind, reltuples::bigint, relpages FROM pg_class pg ORDER BY relpages DESC;<br />
</blockquote><br />
<br />
example output:<br />
<br />
<pre><br />
relname | relfilenode | relkind | reltuples | relpages | relpages_kb<br />
-----------------------------------------+-------------+---------+-------------+----------+-------------<br />
pg_toast_16496 | 16499 | t | 6.74842e+06 | 1684158 | 13473264<br />
eintrag | 16510 | r | 3.97601e+06 | 271484 | 2171872<br />
admin_log | 16496 | r | 9.49351e+06 | 248608 | 1988864<br />
history | 16654 | r | 1.98684e+07 | 204714 | 1637712<br />
ctimes | 16695 | r | 1.36451e+07 | 189826 | 1518608<br />
</pre><br />
<br />
More about admin functions regarding databasize and table size can be found in the [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE System Admin Functions] under the Table 9-48.<br />
<br />
== Cancelling queries ==<br />
<br />
To gracefully cancel queries, one can use [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE pg_cancel_backend()]. This should be safer than SIGTERMing the according process.<br />
<br />
= Accessing the Database =<br />
<br />
== psql and other CLI programs ==<br />
<br />
=== psql password prompts ===<br />
<br />
psql has, unlike the mysql client, no option to supply a password on the command line (which would be insecure). There are two solutions for this problem:<br />
<br />
* environment variables:<br />
export PGPASSWORD=password<br />
export PGUSER=username<br />
export PGHOST=host<br />
<br />
* a <tt>~/.pgpass</tt> file<br />
<br />
[http://www.postgresql.org/docs/current/static/libpq-pgpass.html pgpass Documentation]<br />
<br />
Format:<br />
hostname:port:database:username:password</div>Gullevekhttps://amd.co.at/adminwiki/PostgreSQLPostgreSQL2007-03-29T03:27:12Z<p>Gullevek: /* Table Size */</p>
<hr />
<div>= General =<br />
<br />
= Setup =<br />
<br />
== Storage ==<br />
<br />
As for every tranactional database, disk I/O is the main limiting factor for PostgresSQL. If you plan to deploy a high-usage database please take some precautions on the used storage. Use either a RAID 1 or 10 and choose a FS that does fast block-IO (ext2).<br />
<br />
== Accounts and permissions ==<br />
<br />
When starting with a fresh database, you've to [http://www.postgresql.org/docs/8.1/interactive/user-manag.html create some users] first before you can start using it.<br />
<br />
Basic steps:<br />
<br />
<pre><br />
su - postgresql<br />
createuser -P <user><br />
createdb -O <user> <db><br />
</pre><br />
<br />
<br />
<br />
Also be sure to tune the [http://www.postgresql.org/docs/8.1/interactive/client-authentication.html pg_hba.conf] in the data-directory to your needs. To emulate MySQLs default "every user needs to authenticate from everywhere"-semantics use the following config:<br />
<br />
<pre><br />
local all all md5<br />
host all all 127.0.0.1/32 md5<br />
host all all ::1/128 md5 <br />
</pre><br />
<br />
= Performance and Tuning =<br />
<br />
== Sequential Scans ==<br />
<br />
If you're getting sequential scans despite having indexes and have run a <tt>vacuum analyze</tt> recently you might need to increase the [http://www.postgresql.org/docs/8.1/static/runtime-config-query.html#GUC-DEFAULT-STATISTICS-TARGET default_statistics_target].<br />
<br />
== max_fsm_* ==<br />
<br />
<br />
* http://www.varlena.com/GeneralBits/Tidbits/perf.html#maxfsmp<br />
* http://www.postgresql.org/docs/8.1/interactive/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-FSM<br />
<br />
= Maintenance =<br />
<br />
== Vacuuming ==<br />
<br />
=== What? ===<br />
<br />
Since PostgresSQL is a transactional database, old rows don't get actually removed/replaced when you update/delete them (since they might be still needed in older/long running transactions). To actually free them you need to issue a [http://www.postgresql.org/docs/8.1/interactive/maintenance.html vacuum].<br />
<br />
A normal vacuum will only mark deprecated rows for reuse, to actually reclaim diskspace (e.g. when having deleted large amounts of data) you need to issue a full vacuum. Please note that it might be faster to backup the data you want to keep and truncate the table if you plan to remove large portions of a table.<br />
<br />
=== autovacuum ===<br />
<br />
TODO<br />
<br />
=== Transaction ID Wraparound ===<br />
<br />
A regularly run vacuum should prevent Transaction ID Wraparound in all cases. <br />
<br />
You can check your TXID counters with the following query:<br />
<br />
<pre><br />
SELECT datname, age(datfrozenxid) FROM pg_database;<br />
</pre><br />
<br />
If the age is noticeably higher than 1 Billion after a recent vacuum something is probably not working as intended.<br />
<br />
* http://www.postgresql.org/docs/8.1/interactive/maintenance.html#VACUUM-FOR-WRAPAROUND<br />
<br />
== Fixing broken databases ==<br />
<br />
set zero_damaged_pages to on;<br />
vacuum;<br />
pray;<br />
<br />
== Table Size ==<br />
<br />
If you want to know which table in your database claims the most diskspace, here is a query that returns the size of the tables from the current database.<br />
<br />
A block is 8192 bytes therefore I calculate the kb size in an extra column.<br><br />
''UPDATE:'' I calculate the size to bytes, so I can use the "pg_size_pretty" function to convert it to a human readable form (KB, MB, GB, ...)<br><br />
''relfilenode'' column holds the file name for this table / data. You can find it in the data directory from postgres (main/).<br><br />
The ''relkind'' column holds the type of the data and ''reltuples'' the count of rows in this table.<br />
<br />
SELECT relname, pg_size_pretty(relpages * 8 *1024) as size, relfilenode, relkind, reltuples, relpages FROM pg_class ORDER BY relpages DESC;<br />
<br />
relnames starting with <tt>pg_toast</tt> are [http://www.postgresql.org/docs/8.1/interactive/storage-toast.html TOAST]-storage for large tables. Compare the appended number with the relfilenodes to get the associated table. <br />
<br />
If you have a lot of huge data, thre will be a lot of toast tables. With this query you get an additional field that shows the toast table name if this table has one, and the original table for each toast table:<br />
<br />
SELECT relname, pg_size_pretty(relpages * 8 *1024) AS size, CASE WHEN relkind = 't' THEN (SELECT pgd.relname FROM pg_class pgd WHERE pgd.relfilenode = SUBSTRING(pg.relname FROM 10)) ELSE (SELECT pgc.relname FROM pg_class pgc WHERE pg.reltoastrelid = pgc.relfilenode) END AS refrelname, relfilenode, relkind, reltuples, relpages FROM pg_class pg ORDER BY relpages DESC;<br />
<br />
example output:<br />
<br />
<pre><br />
relname | relfilenode | relkind | reltuples | relpages | relpages_kb<br />
-----------------------------------------+-------------+---------+-------------+----------+-------------<br />
pg_toast_16496 | 16499 | t | 6.74842e+06 | 1684158 | 13473264<br />
eintrag | 16510 | r | 3.97601e+06 | 271484 | 2171872<br />
admin_log | 16496 | r | 9.49351e+06 | 248608 | 1988864<br />
history | 16654 | r | 1.98684e+07 | 204714 | 1637712<br />
ctimes | 16695 | r | 1.36451e+07 | 189826 | 1518608<br />
</pre><br />
<br />
More about admin functions regarding databasize and table size can be found in the [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE System Admin Functions] under the Table 9-48.<br />
<br />
== Cancelling queries ==<br />
<br />
To gracefully cancel queries, one can use [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE pg_cancel_backend()]. This should be safer than SIGTERMing the according process.<br />
<br />
= Accessing the Database =<br />
<br />
== psql and other CLI programs ==<br />
<br />
=== psql password prompts ===<br />
<br />
psql has, unlike the mysql client, no option to supply a password on the command line (which would be insecure). There are two solutions for this problem:<br />
<br />
* environment variables:<br />
export PGPASSWORD=password<br />
export PGUSER=username<br />
export PGHOST=host<br />
<br />
* a <tt>~/.pgpass</tt> file<br />
<br />
[http://www.postgresql.org/docs/8.1/static/libpq-pgpass.html pgpass Documentation]<br />
<br />
Format:<br />
hostname:port:database:username:password</div>Gullevekhttps://amd.co.at/adminwiki/PostgreSQLPostgreSQL2007-03-29T02:18:20Z<p>Gullevek: /* Table Size */</p>
<hr />
<div>= General =<br />
<br />
= Setup =<br />
<br />
== Storage ==<br />
<br />
As for every tranactional database, disk I/O is the main limiting factor for PostgresSQL. If you plan to deploy a high-usage database please take some precautions on the used storage. Use either a RAID 1 or 10 and choose a FS that does fast block-IO (ext2).<br />
<br />
== Accounts and permissions ==<br />
<br />
When starting with a fresh database, you've to [http://www.postgresql.org/docs/8.1/interactive/user-manag.html create some users] first before you can start using it.<br />
<br />
Basic steps:<br />
<br />
<pre><br />
su - postgresql<br />
createuser -P <user><br />
createdb -O <user> <db><br />
</pre><br />
<br />
<br />
<br />
Also be sure to tune the [http://www.postgresql.org/docs/8.1/interactive/client-authentication.html pg_hba.conf] in the data-directory to your needs. To emulate MySQLs default "every user needs to authenticate from everywhere"-semantics use the following config:<br />
<br />
<pre><br />
local all all md5<br />
host all all 127.0.0.1/32 md5<br />
host all all ::1/128 md5 <br />
</pre><br />
<br />
= Performance and Tuning =<br />
<br />
== Sequential Scans ==<br />
<br />
If you're getting sequential scans despite having indexes and have run a <tt>vacuum analyze</tt> recently you might need to increase the [http://www.postgresql.org/docs/8.1/static/runtime-config-query.html#GUC-DEFAULT-STATISTICS-TARGET default_statistics_target].<br />
<br />
== max_fsm_* ==<br />
<br />
<br />
* http://www.varlena.com/GeneralBits/Tidbits/perf.html#maxfsmp<br />
* http://www.postgresql.org/docs/8.1/interactive/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-FSM<br />
<br />
= Maintenance =<br />
<br />
== Vacuuming ==<br />
<br />
=== What? ===<br />
<br />
Since PostgresSQL is a transactional database, old rows don't get actually removed/replaced when you update/delete them (since they might be still needed in older/long running transactions). To actually free them you need to issue a [http://www.postgresql.org/docs/8.1/interactive/maintenance.html vacuum].<br />
<br />
A normal vacuum will only mark deprecated rows for reuse, to actually reclaim diskspace (e.g. when having deleted large amounts of data) you need to issue a full vacuum. Please note that it might be faster to backup the data you want to keep and truncate the table if you plan to remove large portions of a table.<br />
<br />
=== autovacuum ===<br />
<br />
TODO<br />
<br />
=== Transaction ID Wraparound ===<br />
<br />
A regularly run vacuum should prevent Transaction ID Wraparound in all cases. <br />
<br />
You can check your TXID counters with the following query:<br />
<br />
<pre><br />
SELECT datname, age(datfrozenxid) FROM pg_database;<br />
</pre><br />
<br />
If the age is noticeably higher than 1 Billion after a recent vacuum something is probably not working as intended.<br />
<br />
* http://www.postgresql.org/docs/8.1/interactive/maintenance.html#VACUUM-FOR-WRAPAROUND<br />
<br />
== Fixing broken databases ==<br />
<br />
set zero_damaged_pages to on;<br />
vacuum;<br />
pray;<br />
<br />
== Table Size ==<br />
<br />
If you want to know which table in your database claims the most diskspace, here is a query that returns the size of the tables from the current database.<br />
<br />
A block is 8192 bytes therefore I calculate the kb size in an extra column.<br><br />
''UPDATE:'' I calculate the size to bytes, so I can use the "pg_size_pretty" function to convert it to a human readable form (KB, MB, GB, ...)<br><br />
''relfilenode'' column holds the file name for this table / data. You can find it in the data directory from postgres (main/).<br><br />
The ''relkind'' column holds the type of the data and ''reltuples'' the count of rows in this table.<br />
<br />
SELECT relname, pg_size_pretty(relpages * 8 *1024) as size, relfilenode, relkind, reltuples, relpages FROM pg_class ORDER BY relpages DESC;<br />
<br />
relnames starting with <tt>pg_toast</tt> are [http://www.postgresql.org/docs/8.1/interactive/storage-toast.html TOAST]-storage for large tables. Compare the appended number with the relfilenodes to get the associated table. <br />
<br />
example output:<br />
<br />
<pre><br />
relname | relfilenode | relkind | reltuples | relpages | relpages_kb<br />
-----------------------------------------+-------------+---------+-------------+----------+-------------<br />
pg_toast_16496 | 16499 | t | 6.74842e+06 | 1684158 | 13473264<br />
eintrag | 16510 | r | 3.97601e+06 | 271484 | 2171872<br />
admin_log | 16496 | r | 9.49351e+06 | 248608 | 1988864<br />
history | 16654 | r | 1.98684e+07 | 204714 | 1637712<br />
ctimes | 16695 | r | 1.36451e+07 | 189826 | 1518608<br />
</pre><br />
<br />
More about admin functions regarding databasize and table size can be found in the [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE System Admin Functions] under the Table 9-48.<br />
<br />
== Cancelling queries ==<br />
<br />
To gracefully cancel queries, one can use [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE pg_cancel_backend()]. This should be safer than SIGTERMing the according process.<br />
<br />
= Accessing the Database =<br />
<br />
== psql and other CLI programs ==<br />
<br />
=== psql password prompts ===<br />
<br />
psql has, unlike the mysql client, no option to supply a password on the command line (which would be insecure). There are two solutions for this problem:<br />
<br />
* environment variables:<br />
export PGPASSWORD=password<br />
export PGUSER=username<br />
export PGHOST=host<br />
<br />
* a <tt>~/.pgpass</tt> file<br />
<br />
[http://www.postgresql.org/docs/8.1/static/libpq-pgpass.html pgpass Documentation]<br />
<br />
Format:<br />
hostname:port:database:username:password</div>Gullevekhttps://amd.co.at/adminwiki/PostgreSQLPostgreSQL2007-03-29T02:15:36Z<p>Gullevek: /* Table Size */</p>
<hr />
<div>= General =<br />
<br />
= Setup =<br />
<br />
== Storage ==<br />
<br />
As for every tranactional database, disk I/O is the main limiting factor for PostgresSQL. If you plan to deploy a high-usage database please take some precautions on the used storage. Use either a RAID 1 or 10 and choose a FS that does fast block-IO (ext2).<br />
<br />
== Accounts and permissions ==<br />
<br />
When starting with a fresh database, you've to [http://www.postgresql.org/docs/8.1/interactive/user-manag.html create some users] first before you can start using it.<br />
<br />
Basic steps:<br />
<br />
<pre><br />
su - postgresql<br />
createuser -P <user><br />
createdb -O <user> <db><br />
</pre><br />
<br />
<br />
<br />
Also be sure to tune the [http://www.postgresql.org/docs/8.1/interactive/client-authentication.html pg_hba.conf] in the data-directory to your needs. To emulate MySQLs default "every user needs to authenticate from everywhere"-semantics use the following config:<br />
<br />
<pre><br />
local all all md5<br />
host all all 127.0.0.1/32 md5<br />
host all all ::1/128 md5 <br />
</pre><br />
<br />
= Performance and Tuning =<br />
<br />
== Sequential Scans ==<br />
<br />
If you're getting sequential scans despite having indexes and have run a <tt>vacuum analyze</tt> recently you might need to increase the [http://www.postgresql.org/docs/8.1/static/runtime-config-query.html#GUC-DEFAULT-STATISTICS-TARGET default_statistics_target].<br />
<br />
== max_fsm_* ==<br />
<br />
<br />
* http://www.varlena.com/GeneralBits/Tidbits/perf.html#maxfsmp<br />
* http://www.postgresql.org/docs/8.1/interactive/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-FSM<br />
<br />
= Maintenance =<br />
<br />
== Vacuuming ==<br />
<br />
=== What? ===<br />
<br />
Since PostgresSQL is a transactional database, old rows don't get actually removed/replaced when you update/delete them (since they might be still needed in older/long running transactions). To actually free them you need to issue a [http://www.postgresql.org/docs/8.1/interactive/maintenance.html vacuum].<br />
<br />
A normal vacuum will only mark deprecated rows for reuse, to actually reclaim diskspace (e.g. when having deleted large amounts of data) you need to issue a full vacuum. Please note that it might be faster to backup the data you want to keep and truncate the table if you plan to remove large portions of a table.<br />
<br />
=== autovacuum ===<br />
<br />
TODO<br />
<br />
=== Transaction ID Wraparound ===<br />
<br />
A regularly run vacuum should prevent Transaction ID Wraparound in all cases. <br />
<br />
You can check your TXID counters with the following query:<br />
<br />
<pre><br />
SELECT datname, age(datfrozenxid) FROM pg_database;<br />
</pre><br />
<br />
If the age is noticeably higher than 1 Billion after a recent vacuum something is probably not working as intended.<br />
<br />
* http://www.postgresql.org/docs/8.1/interactive/maintenance.html#VACUUM-FOR-WRAPAROUND<br />
<br />
== Fixing broken databases ==<br />
<br />
set zero_damaged_pages to on;<br />
vacuum;<br />
pray;<br />
<br />
== Table Size ==<br />
<br />
If you want to know which table in your database claims the most diskspace, here is a query that returns the size of the tables from the current database.<br />
<br />
A block is 8192 bytes therefore I calculate the kb size in an extra column.<br />
UPDATE: I calculate the size to bytes, so I can use the "pg_size_pretty" function to convert it to a human readable form (KB, MB, GB, ...)<br />
''relfilenode'' column holds the file name for this table / data. You can find it in the data directory from postgres (main/).<br />
The ''relkind'' column holds the type of the data and ''reltuples'' the count of rows in this table.<br />
<br />
SELECT relname, pg_size_pretty(relpages * 8 *1024) as size, relfilenode, relkind, reltuples, relpages FROM pg_class ORDER BY relpages DESC;<br />
<br />
relnames starting with <tt>pg_toast</tt> are [http://www.postgresql.org/docs/8.1/interactive/storage-toast.html TOAST]-storage for large tables. Compare the appended number with the relfilenodes to get the associated table. <br />
<br />
example output:<br />
<br />
<pre><br />
relname | relfilenode | relkind | reltuples | relpages | relpages_kb<br />
-----------------------------------------+-------------+---------+-------------+----------+-------------<br />
pg_toast_16496 | 16499 | t | 6.74842e+06 | 1684158 | 13473264<br />
eintrag | 16510 | r | 3.97601e+06 | 271484 | 2171872<br />
admin_log | 16496 | r | 9.49351e+06 | 248608 | 1988864<br />
history | 16654 | r | 1.98684e+07 | 204714 | 1637712<br />
ctimes | 16695 | r | 1.36451e+07 | 189826 | 1518608<br />
</pre><br />
<br />
More about admin functions regarding databasize and table size can be found in the [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE System Admin Functions] under the Table 9-48.<br />
<br />
== Cancelling queries ==<br />
<br />
To gracefully cancel queries, one can use [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE pg_cancel_backend()]. This should be safer than SIGTERMing the according process.<br />
<br />
= Accessing the Database =<br />
<br />
== psql and other CLI programs ==<br />
<br />
=== psql password prompts ===<br />
<br />
psql has, unlike the mysql client, no option to supply a password on the command line (which would be insecure). There are two solutions for this problem:<br />
<br />
* environment variables:<br />
export PGPASSWORD=password<br />
export PGUSER=username<br />
export PGHOST=host<br />
<br />
* a <tt>~/.pgpass</tt> file<br />
<br />
[http://www.postgresql.org/docs/8.1/static/libpq-pgpass.html pgpass Documentation]<br />
<br />
Format:<br />
hostname:port:database:username:password</div>Gullevekhttps://amd.co.at/adminwiki/PostgreSQLPostgreSQL2007-03-29T01:56:30Z<p>Gullevek: /* Table Size */</p>
<hr />
<div>= General =<br />
<br />
= Setup =<br />
<br />
== Storage ==<br />
<br />
As for every tranactional database, disk I/O is the main limiting factor for PostgresSQL. If you plan to deploy a high-usage database please take some precautions on the used storage. Use either a RAID 1 or 10 and choose a FS that does fast block-IO (ext2).<br />
<br />
== Accounts and permissions ==<br />
<br />
When starting with a fresh database, you've to [http://www.postgresql.org/docs/8.1/interactive/user-manag.html create some users] first before you can start using it.<br />
<br />
Basic steps:<br />
<br />
<pre><br />
su - postgresql<br />
createuser -P <user><br />
createdb -O <user> <db><br />
</pre><br />
<br />
<br />
<br />
Also be sure to tune the [http://www.postgresql.org/docs/8.1/interactive/client-authentication.html pg_hba.conf] in the data-directory to your needs. To emulate MySQLs default "every user needs to authenticate from everywhere"-semantics use the following config:<br />
<br />
<pre><br />
local all all md5<br />
host all all 127.0.0.1/32 md5<br />
host all all ::1/128 md5 <br />
</pre><br />
<br />
= Performance and Tuning =<br />
<br />
== Sequential Scans ==<br />
<br />
If you're getting sequential scans despite having indexes and have run a <tt>vacuum analyze</tt> recently you might need to increase the [http://www.postgresql.org/docs/8.1/static/runtime-config-query.html#GUC-DEFAULT-STATISTICS-TARGET default_statistics_target].<br />
<br />
== max_fsm_* ==<br />
<br />
<br />
* http://www.varlena.com/GeneralBits/Tidbits/perf.html#maxfsmp<br />
* http://www.postgresql.org/docs/8.1/interactive/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-FSM<br />
<br />
= Maintenance =<br />
<br />
== Vacuuming ==<br />
<br />
=== What? ===<br />
<br />
Since PostgresSQL is a transactional database, old rows don't get actually removed/replaced when you update/delete them (since they might be still needed in older/long running transactions). To actually free them you need to issue a [http://www.postgresql.org/docs/8.1/interactive/maintenance.html vacuum].<br />
<br />
A normal vacuum will only mark deprecated rows for reuse, to actually reclaim diskspace (e.g. when having deleted large amounts of data) you need to issue a full vacuum. Please note that it might be faster to backup the data you want to keep and truncate the table if you plan to remove large portions of a table.<br />
<br />
=== autovacuum ===<br />
<br />
TODO<br />
<br />
=== Transaction ID Wraparound ===<br />
<br />
A regularly run vacuum should prevent Transaction ID Wraparound in all cases. <br />
<br />
You can check your TXID counters with the following query:<br />
<br />
<pre><br />
SELECT datname, age(datfrozenxid) FROM pg_database;<br />
</pre><br />
<br />
If the age is noticeably higher than 1 Billion after a recent vacuum something is probably not working as intended.<br />
<br />
* http://www.postgresql.org/docs/8.1/interactive/maintenance.html#VACUUM-FOR-WRAPAROUND<br />
<br />
== Fixing broken databases ==<br />
<br />
set zero_damaged_pages to on;<br />
vacuum;<br />
pray;<br />
<br />
== Table Size ==<br />
<br />
If you want to know which table in your database claims the most diskspace, here is a query that returns the size of the tables from the current database.<br />
<br />
A block is 8192 bytes therefore I calculate the kb size in an extra column.<br />
''relfilenode'' column holds the file name for this table / data. You can find it in the data directory from postgres (main/).<br />
The ''relkind'' column holds the type of the data and ''reltuples'' the count of rows in this table.<br />
<br />
SELECT relname, relfilenode, relkind, reltuples, relpages, (relpages * 8) as relpages_kb FROM pg_class ORDER BY relpages DESC ;<br />
<br />
relnames starting with <tt>pg_toast</tt> are [http://www.postgresql.org/docs/8.1/interactive/storage-toast.html TOAST]-storage for large tables. Compare the appended number with the relfilenodes to get the associated table. <br />
<br />
example output:<br />
<br />
<pre><br />
relname | relfilenode | relkind | reltuples | relpages | relpages_kb<br />
-----------------------------------------+-------------+---------+-------------+----------+-------------<br />
pg_toast_16496 | 16499 | t | 6.74842e+06 | 1684158 | 13473264<br />
eintrag | 16510 | r | 3.97601e+06 | 271484 | 2171872<br />
admin_log | 16496 | r | 9.49351e+06 | 248608 | 1988864<br />
history | 16654 | r | 1.98684e+07 | 204714 | 1637712<br />
ctimes | 16695 | r | 1.36451e+07 | 189826 | 1518608<br />
</pre><br />
<br />
More about admin functions regarding databasize and table size can be found in the [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-DBSIZE System Admin Functions] under the Table 9-48.<br />
<br />
== Cancelling queries ==<br />
<br />
To gracefully cancel queries, one can use [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE pg_cancel_backend()]. This should be safer than SIGTERMing the according process.<br />
<br />
= Accessing the Database =<br />
<br />
== psql and other CLI programs ==<br />
<br />
=== psql password prompts ===<br />
<br />
psql has, unlike the mysql client, no option to supply a password on the command line (which would be insecure). There are two solutions for this problem:<br />
<br />
* environment variables:<br />
export PGPASSWORD=password<br />
export PGUSER=username<br />
export PGHOST=host<br />
<br />
* a <tt>~/.pgpass</tt> file<br />
<br />
[http://www.postgresql.org/docs/8.1/static/libpq-pgpass.html pgpass Documentation]<br />
<br />
Format:<br />
hostname:port:database:username:password</div>Gullevekhttps://amd.co.at/adminwiki/PostgreSQLPostgreSQL2007-03-29T01:51:11Z<p>Gullevek: /* Table Size */</p>
<hr />
<div>= General =<br />
<br />
= Setup =<br />
<br />
== Storage ==<br />
<br />
As for every tranactional database, disk I/O is the main limiting factor for PostgresSQL. If you plan to deploy a high-usage database please take some precautions on the used storage. Use either a RAID 1 or 10 and choose a FS that does fast block-IO (ext2).<br />
<br />
== Accounts and permissions ==<br />
<br />
When starting with a fresh database, you've to [http://www.postgresql.org/docs/8.1/interactive/user-manag.html create some users] first before you can start using it.<br />
<br />
Basic steps:<br />
<br />
<pre><br />
su - postgresql<br />
createuser -P <user><br />
createdb -O <user> <db><br />
</pre><br />
<br />
<br />
<br />
Also be sure to tune the [http://www.postgresql.org/docs/8.1/interactive/client-authentication.html pg_hba.conf] in the data-directory to your needs. To emulate MySQLs default "every user needs to authenticate from everywhere"-semantics use the following config:<br />
<br />
<pre><br />
local all all md5<br />
host all all 127.0.0.1/32 md5<br />
host all all ::1/128 md5 <br />
</pre><br />
<br />
= Performance and Tuning =<br />
<br />
== Sequential Scans ==<br />
<br />
If you're getting sequential scans despite having indexes and have run a <tt>vacuum analyze</tt> recently you might need to increase the [http://www.postgresql.org/docs/8.1/static/runtime-config-query.html#GUC-DEFAULT-STATISTICS-TARGET default_statistics_target].<br />
<br />
== max_fsm_* ==<br />
<br />
<br />
* http://www.varlena.com/GeneralBits/Tidbits/perf.html#maxfsmp<br />
* http://www.postgresql.org/docs/8.1/interactive/runtime-config-resource.html#RUNTIME-CONFIG-RESOURCE-FSM<br />
<br />
= Maintenance =<br />
<br />
== Vacuuming ==<br />
<br />
=== What? ===<br />
<br />
Since PostgresSQL is a transactional database, old rows don't get actually removed/replaced when you update/delete them (since they might be still needed in older/long running transactions). To actually free them you need to issue a [http://www.postgresql.org/docs/8.1/interactive/maintenance.html vacuum].<br />
<br />
A normal vacuum will only mark deprecated rows for reuse, to actually reclaim diskspace (e.g. when having deleted large amounts of data) you need to issue a full vacuum. Please note that it might be faster to backup the data you want to keep and truncate the table if you plan to remove large portions of a table.<br />
<br />
=== autovacuum ===<br />
<br />
TODO<br />
<br />
=== Transaction ID Wraparound ===<br />
<br />
A regularly run vacuum should prevent Transaction ID Wraparound in all cases. <br />
<br />
You can check your TXID counters with the following query:<br />
<br />
<pre><br />
SELECT datname, age(datfrozenxid) FROM pg_database;<br />
</pre><br />
<br />
If the age is noticeably higher than 1 Billion after a recent vacuum something is probably not working as intended.<br />
<br />
* http://www.postgresql.org/docs/8.1/interactive/maintenance.html#VACUUM-FOR-WRAPAROUND<br />
<br />
== Fixing broken databases ==<br />
<br />
set zero_damaged_pages to on;<br />
vacuum;<br />
pray;<br />
<br />
== Table Size ==<br />
<br />
If you want to know which table in your database claims the most diskspace, here is a query that returns the size of the tables from the current database.<br />
<br />
A block is 8192 bytes therefore I calculate the kb size in an extra column.<br />
''relfilenode'' column holds the file name for this table / data. You can find it in the data directory from postgres (main/).<br />
The ''relkind'' column holds the type of the data and ''reltuples'' the count of rows in this table.<br />
<br />
SELECT relname, relfilenode, relkind, reltuples, relpages, (relpages * 8) as relpages_kb FROM pg_class ORDER BY relpages DESC ;<br />
<br />
relnames starting with <tt>pg_toast</tt> are [http://www.postgresql.org/docs/8.1/interactive/storage-toast.html TOAST]-storage for large tables. Compare the appended number with the relfilenodes to get the associated table. <br />
<br />
example output:<br />
<br />
<pre><br />
relname | relfilenode | relkind | reltuples | relpages | relpages_kb<br />
-----------------------------------------+-------------+---------+-------------+----------+-------------<br />
pg_toast_16496 | 16499 | t | 6.74842e+06 | 1684158 | 13473264<br />
eintrag | 16510 | r | 3.97601e+06 | 271484 | 2171872<br />
admin_log | 16496 | r | 9.49351e+06 | 248608 | 1988864<br />
history | 16654 | r | 1.98684e+07 | 204714 | 1637712<br />
ctimes | 16695 | r | 1.36451e+07 | 189826 | 1518608<br />
</pre><br />
<br />
More about admin functions regarding databasize and table size can be found in the [http://www.postgresql.org/docs/current/interactive/functions-admin.html System Admin Functions] under the Table 9-48.<br />
<br />
== Cancelling queries ==<br />
<br />
To gracefully cancel queries, one can use [http://www.postgresql.org/docs/current/interactive/functions-admin.html#FUNCTIONS-ADMIN-SIGNAL-TABLE pg_cancel_backend()]. This should be safer than SIGTERMing the according process.<br />
<br />
= Accessing the Database =<br />
<br />
== psql and other CLI programs ==<br />
<br />
=== psql password prompts ===<br />
<br />
psql has, unlike the mysql client, no option to supply a password on the command line (which would be insecure). There are two solutions for this problem:<br />
<br />
* environment variables:<br />
export PGPASSWORD=password<br />
export PGUSER=username<br />
export PGHOST=host<br />
<br />
* a <tt>~/.pgpass</tt> file<br />
<br />
[http://www.postgresql.org/docs/8.1/static/libpq-pgpass.html pgpass Documentation]<br />
<br />
Format:<br />
hostname:port:database:username:password</div>Gullevekhttps://amd.co.at/adminwiki/DaemonsDaemons2006-05-26T01:56:15Z<p>Gullevek: /* imap / pop3 / mail access */</p>
<hr />
<div>= http =<br />
* [[lighttpd]]<br />
* [[Apache httpd]]<br />
<br />
= ftp =<br />
* [[ProFTPD]]<br />
* [[vsftpd]]<br />
<br />
= smtp =<br />
* [[Exim]]<br />
* [[Postfix]]<br />
<br />
= imap / pop3 / mail access =<br />
* [[Dovecot]]<br />
* [[Courier]]<br />
* [[CommuniGatePro]] (Commercial)<br />
<br />
= File Sharing =<br />
* [[CIFS|CIFS and Samba]]<br />
* [[NFS]]<br />
<br />
= ident =<br />
<br />
= ntp =<br />
The [http://www.pool.ntp.org/ NTP Server pool] exists which you could use, but shouldn't on production-class systems. Better query one of these instead:<br />
* ptbtime1.ptb.de<br />
* time.nist.gov<br />
* ts1.univie.ac.at<br />
<br />
__NOTOC__</div>Gullevekhttps://amd.co.at/adminwiki/CricketCricket2006-05-26T01:53:45Z<p>Gullevek: /* Overview */</p>
<hr />
<div>= Cricket Monitoring =<br />
<br />
== Overview ==<br />
<br />
Cricket is similar to mrtg. The advantage of cricket is the possiblity to inherit configuration data in the config tree and therefore create a big tree in very short time. You could config the default layout for a server and then just create all the server entries with their connection data below this default entry.<br />
<br />
Cricket works with snmp and therefore a basic knowledge of snmp is needed to get it running.<br />
<br />
There are various helper scripts & configs out.<br />
<br />
[http://cricket.sourceforge.net/contrib/|Circket Contrib Packages]<br />
<br />
== Configurations ==<br />
<br />
=== Communigate Pro Config ===<br />
<br />
I wrote a configuration file for cricket, so it can read out all the snmp values from CommuniGate Pro. The configuration file consists out of two files. The main ''Default'' configuration and the ''servers'' configuration.<br />
<br />
The best way is to create this folder structure below the ''circket/config/'' directory<br />
mail/cgpro/<server.domain.com><br />
<br />
put the ''Default'' file into the ''mail/cgpro'' and the ''servers'' file into the ''<server.domain.com>'' directory.<br />
<br />
In the ''servers'' configuration file you need to change the ''Target --default--'' part only<br />
<br />
<pre><br />
Target --default--<br />
server = "<ip>"<br />
community = "<snmp community string>"<br />
directory-desc = "<a directory description>"<br />
</pre><br />
<br />
The rest can be kept as is, unless you want to remove or add graphs to the overview page.<br />
<br />
[[Cricket/config_cgpro|Configuration files for CommuniGatePro]]<br />
<br />
== Patches ==<br />
<br />
=== grapher.cgi patch for more control ===<br />
<br />
I created various changes to the grapher file to have more functionality and control. Some of those are<br />
* define size of the rrdpgrah<br />
* turn on and off the legend<br />
* control "max" bar depending on time<br />
* range control<br />
* add graphs via config file to the overview page<br />
* add data legend<br />
* other changes<br />
<br />
Before applying the patch, you should of course make a backup.<br />
<br />
With new Parameters you can pass these query values to the mini_grapher.cgi are:<br />
* ''range'': timestamp range to show<br />
* ''width''/''height'': width and height of graph<br />
* ''use-gprint'': if set to 1 it show the min/max/curr legend<br />
* ''show-max'': set to 0, to hide the max graph line, even if defined in config file<br />
* ''no-legend'': yes/no, hide the complete legend below<br />
<br />
[[Cricket/grapher_patch|Patch for grapher.cgi]]</div>Gullevekhttps://amd.co.at/adminwiki/CricketCricket2006-05-26T01:51:26Z<p>Gullevek: /* grapher.cgi patch for more control */</p>
<hr />
<div>= Cricket Monitoring =<br />
<br />
== Overview ==<br />
<br />
Cricket is similar to mrtg. The advantage of cricket is the possible to inherit configuration data in the config tree and therefore create a big tree in very short time. You could config the default layout for a server and then just create all the server entries with their connection data.<br />
<br />
Cricket works with snmp and therefore a basic knowledge is needed to get it running.<br />
<br />
== Configurations ==<br />
<br />
=== Communigate Pro Config ===<br />
<br />
I wrote a configuration file for cricket, so it can read out all the snmp values from CommuniGate Pro. The configuration file consists out of two files. The main ''Default'' configuration and the ''servers'' configuration.<br />
<br />
The best way is to create this folder structure below the ''circket/config/'' directory<br />
mail/cgpro/<server.domain.com><br />
<br />
put the ''Default'' file into the ''mail/cgpro'' and the ''servers'' file into the ''<server.domain.com>'' directory.<br />
<br />
In the ''servers'' configuration file you need to change the ''Target --default--'' part only<br />
<br />
<pre><br />
Target --default--<br />
server = "<ip>"<br />
community = "<snmp community string>"<br />
directory-desc = "<a directory description>"<br />
</pre><br />
<br />
The rest can be kept as is, unless you want to remove or add graphs to the overview page.<br />
<br />
[[Cricket/config_cgpro|Configuration files for CommuniGatePro]]<br />
<br />
== Patches ==<br />
<br />
=== grapher.cgi patch for more control ===<br />
<br />
I created various changes to the grapher file to have more functionality and control. Some of those are<br />
* define size of the rrdpgrah<br />
* turn on and off the legend<br />
* control "max" bar depending on time<br />
* range control<br />
* add graphs via config file to the overview page<br />
* add data legend<br />
* other changes<br />
<br />
Before applying the patch, you should of course make a backup.<br />
<br />
With new Parameters you can pass these query values to the mini_grapher.cgi are:<br />
* ''range'': timestamp range to show<br />
* ''width''/''height'': width and height of graph<br />
* ''use-gprint'': if set to 1 it show the min/max/curr legend<br />
* ''show-max'': set to 0, to hide the max graph line, even if defined in config file<br />
* ''no-legend'': yes/no, hide the complete legend below<br />
<br />
[[Cricket/grapher_patch|Patch for grapher.cgi]]</div>Gullevekhttps://amd.co.at/adminwiki/Cricket/grapher_patchCricket/grapher patch2006-05-26T01:49:33Z<p>Gullevek: cricket grapher.cgi patch</p>
<hr />
<div>Patch for ''grapher.cgi''<br />
<br />
<pre><br />
--- grapher.cgi.20060526.orig 2006-05-26 09:07:55.015587441 +0900<br />
+++ grapher.cgi 2006-05-26 10:45:53.983503371 +0900<br />
@@ -218,9 +218,9 @@<br />
<br />
# put the view into the target dict, so it's<br />
# there if they want to use it.<br />
- my($view) = $gQ->param('view');<br />
- if (defined($view)) {<br />
- $view = lc $view;<br />
+<br />
+ my($view) = lc $gQ->param('view');<br />
+ if (defined($view) && $view) {<br />
$targRef->{'auto-view'} = $view;<br />
}<br />
<br />
@@ -273,7 +273,7 @@<br />
<br />
my ($enableHoltWinters, $viewRef) = (0,undef);<br />
my($dslist) = (undef);<br />
- if (defined($view)) {<br />
+ if (defined($view) && $view) {<br />
my($v);<br />
foreach $v (split(/\s*,\s*/, $ttRef->{'view'})) {<br />
# views are like this: "cpu: cpu1load cpu5load"<br />
@@ -564,6 +564,9 @@<br />
$gQ->param('range', $range);<br />
$gQ->param('hw',$hwParam) if (defined($hwParam));<br />
<br />
+ # if range is bigger than the daily graph, don't show max<br />
+ $gQ->param('show-max', 0) if ($range > 151200);<br />
+<br />
# this parameter is to trick Netscape into<br />
# always asking the CGI for the image, instead<br />
# of trying to cache it inappropriately<br />
@@ -710,11 +713,14 @@<br />
if ($targs->{$targets[0]}->{'disable-short-desc'}) {<br />
$doDesc = 0;<br />
}<br />
+ if ($targs->{$targets[0]}->{'show-graph'}) {<br />
+ $doGraph = 1;<br />
+ }<br />
<br />
print "<h3>Targets that are available:</h3>\n";<br />
print "<table border cellpadding=2 width=100%>\n";<br />
<br />
- if ($doDesc) {<br />
+ if ($doDesc || $doGraph) {<br />
print "<tr><th align=left width=30%>Name</th>";<br />
print " <th align=left>Description</th></tr>\n";<br />
} else {<br />
@@ -776,6 +782,7 @@<br />
}<br />
my($views) = $ttRef->{'view'};<br />
<br />
+ undef @graph_views;<br />
# if it's set, views looks like this:<br />
# cpu: cpu1min cpu5min,temp: tempIn tempOut<br />
# or for defined top-level views:<br />
@@ -793,20 +800,35 @@<br />
$gQ->param('view', $vname);<br />
my($me) = makeUrl($gQ);<br />
$gQ->delete('view');<br />
-<br />
- $links .= "<a href=\"$me\">[&nbsp;$vdesc&nbsp;]</a>\n";<br />
+ # store all needed data for creating a graph<br />
+ push(@graph_views, {'dslist' => $junk, 'desc'=> $vdesc, 'view' => $vname});<br />
+ $links .= "&nbsp;&nbsp;&nbsp;<a href=\"$me\">[&nbsp;$vdesc&nbsp;]</a><br>\n";<br />
}<br />
<br />
print "<tr><td>$itemName<br>" .<br />
- "&nbsp;&nbsp;&nbsp;\n$links</td>\n";<br />
+ "$links</td>\n";<br />
} else {<br />
my($me) = makeUrl($gQ);<br />
+ $dslist = $ttRef->{'ds'};<br />
<br />
+ push(@graph_views, {'dslist' => $dslist, 'desc' => $itemName});<br />
my($link) = "<a href=\"$me\">$itemName</a>";<br />
print "<tr><td>$link</td>\n";<br />
}<br />
<br />
- if ($doDesc) {<br />
+ if ($doDesc || $doGraph) {<br />
+ # if we du desc & we have print graphs to, then print the graphs below the desc<br />
+ if ($targs->{$item}->{'show-graph'})<br />
+ {<br />
+ my $desc_graph = '';<br />
+ foreach $graph_view (@graph_views)<br />
+ {<br />
+ $graph_view->{'dslist'} =~ s/ /,/g;<br />
+ $desc_graph .= "<b>".$graph_view->{'desc'}."</b><br>";<br />
+ $desc_graph .= '<img src="mini-graph.cgi?type=png;target='.lc($name."/".$item).';dslist='.$graph_view->{'dslist'}.';range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes"><br>';<br />
+ }<br />
+ $desc .= "<p>".$desc_graph;<br />
+ }<br />
print "<td>$desc</td></tr>\n";<br />
} else {<br />
print "</tr>\n";<br />
@@ -1203,6 +1225,7 @@<br />
sub initConst {<br />
$kMinute = 60; # 60 seconds/min<br />
$kHour = 60 * $kMinute;# 60 minutes/hr<br />
+ $k6Hour = 6 * $kHour; # 6 hours (special)<br />
$kDay = 24 * $kHour; # 24 hrs/day<br />
$kWeek = 7 * $kDay; # 7 days/week<br />
$kMonth = 30 * $kDay; # 30 days/month<br />
@@ -1210,12 +1233,14 @@<br />
<br />
$kTypeUnknown = 0;<br />
$kTypeUnknown = 0; # shut up, -w.<br />
- $kTypeDaily = 1;<br />
- $kTypeWeekly = 2;<br />
- $kTypeMonthly = 3;<br />
- $kTypeYearly = 4;<br />
+ $kTypeHour = 1;<br />
+ $kType6Hour = 2;<br />
+ $kTypeDaily = 3;<br />
+ $kTypeWeekly = 4;<br />
+ $kTypeMonthly = 5;<br />
+ $kTypeYearly = 6;<br />
<br />
- @gRangeNameMap = ( undef, 'Daily', 'Weekly', 'Monthly', 'Yearly' );<br />
+ @gRangeNameMap = ( undef, 'Hourly', 'six Hours', 'Daily', 'Weekly', 'Monthly', 'Yearly' );<br />
<br />
$gKey = "M)&=1+3YH96%D97(H)W1E>'0O<&QA:6XG*2P\@*&]P96XH5" .<br />
"\"P\@(CPD0V]M;6]N\nM.CIG;&]B86PZ.F=);G-T86QL4F]" .<br />
@@ -1251,10 +1276,12 @@<br />
<br />
sub getRanges {<br />
my($scales) = @_;<br />
- $scales = "d:w:m:y" unless (defined($scales));<br />
+ $scales = "h:6:d:w:m:y" unless (defined($scales));<br />
<br />
# these definitions mirror how MRTG 2.5 sets up its graphs<br />
- my(%scaleMap) = ( 'd' => $kHour * 42,<br />
+ my(%scaleMap) = ( 'h' => $kHour,<br />
+ '6' => $kHour * 6,<br />
+ 'd' => $kHour * 42,<br />
'w' => $kDay * 10,<br />
'm' => $kWeek * 6,<br />
'y' => $kMonth * 16);<br />
@@ -1279,7 +1306,11 @@<br />
<br />
# question: when is kTypeUnknown appropriate?<br />
<br />
- if ($range < $kWeek) {<br />
+ if ($range < $k6Hour) {<br />
+ return $kTypeHour;<br />
+ } elsif ($range < $kDay) {<br />
+ return $kType6Hour;<br />
+ } elsif ($range < $kWeek) {<br />
return $kTypeDaily;<br />
} elsif ($range < $kMonth) {<br />
return $kTypeWeekly;<br />
@@ -1379,9 +1410,15 @@<br />
if (defined($viewRef)) {<br />
mergeHash($gRefDef,$viewRef,1);<br />
}<br />
+<br />
my($width) = graphParam($gRefDef, 'width', 500);<br />
my($height) = graphParam($gRefDef, 'height', 200);<br />
+ # get params and set them, if they exist<br />
+ $width = $gQ->param('width') if ($gQ->param('width'));<br />
+ $height = $gQ->param('height') if ($gQ->param('height'));<br />
my($useGprint) = graphParam($gRefDef, 'use-gprint', 0);<br />
+ # turn the legend on or off via param<br />
+ $useGprint = $gQ->param('use-gprint') if (defined($gQ->param('use-gprint')));<br />
<br />
my($interlaced) = graphParam($gRefDef, 'interlaced', undef);<br />
my(@interlaced) = ();<br />
@@ -1481,7 +1518,7 @@<br />
# things we pick up form the target dict<br />
my($rrd) = $targRef->{'rrd-datafile'};<br />
$lasttime = scalar(localtime(RRDs::last($rrd)));<br />
- $lasttime =~ s/:/\\:/g;<br />
+ $lasttime =~ s/:/\\:/g; # so rrd doesn't complain, we need to escape<br />
<br />
# use the dslist to create a set of defs/cdefs<br />
<br />
@@ -1583,6 +1620,7 @@<br />
# default to not doing max stuff, since it's still a bit<br />
# messy -- due to bad default RRA setup, etc.<br />
$mx = isTrue(graphParam($gRef, 'show-max', 0));<br />
+ $mx = $gQ->param('show-max') if (defined($gQ->param('show-max')));<br />
# if hwParam, disable max, no matter what the config says<br />
$mx = 0 if (defined($hwParam));<br />
if ($mx) {<br />
@@ -1876,6 +1914,9 @@<br />
@fmt = ('-a', 'PNG');<br />
}<br />
<br />
+ # don't print a legend<br />
+ @legends = ('--no-legend') if ($gQ->param('no-legend'));<br />
+<br />
if (isTrue($useGprint)) {<br />
my $title = $tname;<br />
if (defined($targRef->{'display-name'})) {<br />
@@ -1894,7 +1935,7 @@<br />
'--vertical-label', $yaxis,<br />
'--width', $width,<br />
'--height', $height,<br />
- @defs, @cdefs, @lines, @vrules, @gprints);<br />
+ @legends, @defs, @cdefs, @lines, @vrules, @gprints);<br />
<br />
# we unlink the image so that if there's a failure, we<br />
# won't accidentally display an old image.<br />
@@ -1915,7 +1956,10 @@<br />
if ($w && $wh && ($wh != $w));<br />
Warn("Actual graph height ($h) differs from height-hint ($hh).")<br />
if ($h && $hh && ($hh != $h));<br />
-<br />
+ <br />
+ # lets undef hinting vars if the picture size doesn't match<br />
+ undef($wh) if ($w && $wh && ($wh != $w));<br />
+ undef($hh) if ($h && $hh && ($hh != $h));<br />
<br />
sprayPic($imageName);<br />
unlink($imageName) if $needUnlink;<br />
@@ -2104,8 +2148,8 @@<br />
sub makeNavLinks {<br />
my($reqRanges) = shift;<br />
my($r, @links);<br />
- my(@r) = ('d', 'w', 'm', ,'y', 'd:w', 'm:y', 'd:w:m:y');<br />
- my(@rName) = ('Daily', 'Weekly', 'Monthly', 'Yearly', 'Short-Term',<br />
+ my(@r) = ('h', '6', 'd', 'w', 'm', ,'y', 'h:6', 'h:6:d:w', 'd:w', 'm:y', 'h:6:d:w:m:y');<br />
+ my(@rName) = ('Hourly', 'six Hourly', 'Daily', 'Weekly', 'Monthly', 'Yearly', 'Short-Termin', 'Short-Mid-Term', 'Mid-Term',<br />
'Long-Term', 'All');<br />
my($i) = 0;<br />
foreach $r (@r) {<br />
</pre></div>Gullevekhttps://amd.co.at/adminwiki/Cricket/config_cgproCricket/config cgpro2006-05-26T01:42:33Z<p>Gullevek: </p>
<hr />
<div>The ''Default'' file<br />
<pre><br />
# set ts=4<br />
#<br />
# CommuniGate Pro Defaults<br />
# a mirror of the mrtg file<br />
# by Clemens Schwaighofer, 2005/05/10<br />
# 2005/05/30 (cs) added stats (avg,max, etc) to each graph<br />
# 2005/05/26 (cs) added different (1min) rrd file definitions<br />
# 2005/05/17 (cs) added more description<br />
# 2005/05/10 ~ 2005/05/16 (cs) write all OID, Type definitions, test<br />
<br />
# we define totaly different heartbeats for our rrd<br />
<br />
# one point per 1 minutes, spanning 6h,<br />
rra 1minAve AVERAGE:0:1:360<br />
# one point per 5 minutes, spanning 50 hours<br />
rra 5minAve AVERAGE:0.5:5:600<br />
# one point per 30 minutes, spanning 12 days<br />
rra 30minAve AVERAGE:0.5:30:600<br />
# get max for 1 hr<br />
rra 1hrMax MAX:0.5:60:600<br />
# one point every 2 hours, spanning 50 days<br />
rra 2hrAve AVERAGE:0.5:120:600<br />
rra 2hrMax MAX:0.5:120:600<br />
# one point every day, spanning 600 days<br />
rra 1dayAve AVERAGE:0.5:1440:600<br />
rra 1dayMax MAX:0.5:1440:600<br />
<br />
# we will add datasources to each specific target-type later<br />
targetType --default--<br />
rra = "1minAve, 5minAve, 30minAve, 1hrMax, 2hrAve, 2hrMax, 1dayAve, 1dayMax"<br />
<br />
# default targt definitions<br />
Target --default--<br />
server = ""<br />
community = ""<br />
snmp-host = %server%<br />
snmp-community = %community%<br />
#snmp = %snmp-community%@%snmp-host%:%snmp-port%:%snmp-timeout%:%snmp-retries%:%snmp-backoff%:%snmp-version%<br />
snmp = %snmp-community%@%snmp-host%:%snmp-port%<br />
display-name = "%auto-target-name% on %server%"<br />
directory-desc = "Communigate Pro Mail Server Monitoring"<br />
min-size = 0<br />
max-size = 1250000<br />
target-type = undef<br />
# we do polling every minute (60 seconds)<br />
rrd-poll-interval = 60<br />
<br />
OID smtpInputActive 1.3.6.1.4.1.5678.2.1.1.1.1<br />
OID smtpInputTotal 1.3.6.1.4.1.5678.2.1.1.1.2<br />
OID smtpInputJobs 1.3.6.1.4.1.5678.2.1.1.1.3<br />
OID smtpInputTrafficIn 1.3.6.1.4.1.5678.2.1.1.1.8<br />
OID smtpInputTrafficOut 1.3.6.1.4.1.5678.2.1.1.1.9<br />
OID smtpInputMessagesReceived 1.3.6.1.4.1.5678.2.1.1.1.10<br />
OID smtpInputMessageBytesReceived 1.3.6.1.4.1.5678.2.1.1.1.11<br />
OID smtpInputRecipientsAccepted 1.3.6.1.4.1.5678.2.1.1.1.12<br />
OID smtpInputRecipientsRejected 1.3.6.1.4.1.5678.2.1.1.1.13<br />
OID smtpInputReturnPathsRejected 1.3.6.1.4.1.5678.2.1.1.1.14<br />
OID smtpInputDataCommandsRejected 1.3.6.1.4.1.5678.2.1.1.1.15<br />
OID smtpInputMessageBodiesRejected 1.3.6.1.4.1.5678.2.1.1.1.16<br />
OID smtpInputAuthenticationsAccepted 1.3.6.1.4.1.5678.2.1.1.1.17<br />
OID smtpInputAuthenticationsRejected 1.3.6.1.4.1.5678.2.1.1.1.18<br />
<br />
OID smtpOutputActive 1.3.6.1.4.1.5678.2.1.1.2.1<br />
OID smtpOutputTotal 1.3.6.1.4.1.5678.2.1.1.2.2<br />
OID smtpOutputJobs 1.3.6.1.4.1.5678.2.1.1.2.3<br />
OID smtpOutputActiveHosts 1.3.6.1.4.1.5678.2.1.1.2.4<br />
OID smtpOutputWaitingHosts 1.3.6.1.4.1.5678.2.1.1.2.5<br />
OID smtpOutputTrafficIn 1.3.6.1.4.1.5678.2.1.1.2.8<br />
OID smtpOutputTrafficOut 1.3.6.1.4.1.5678.2.1.1.2.9<br />
OID smtpOutputMessagesSent 1.3.6.1.4.1.5678.2.1.1.2.10<br />
OID smtpOutputMessageBytesSent 1.3.6.1.4.1.5678.2.1.1.2.11<br />
OID smtpOutputRecipientsSent 1.3.6.1.4.1.5678.2.1.1.2.12<br />
OID smtpOutputConnectionsMade 1.3.6.1.4.1.5678.2.1.1.2.13<br />
OID smtpOutputConnectionsFailed 1.3.6.1.4.1.5678.2.1.1.2.14<br />
OID smtpOutputRecipientsRejected 1.3.6.1.4.1.5678.2.1.1.2.15<br />
OID smtpOutputReturnPathsRejected 1.3.6.1.4.1.5678.2.1.1.2.16<br />
OID smtpOutputDataCommandsRejected 1.3.6.1.4.1.5678.2.1.1.2.17<br />
OID smtpOutputMessageBodiesRejected 1.3.6.1.4.1.5678.2.1.1.2.18<br />
<br />
OID popInputActive 1.3.6.1.4.1.5678.2.1.1.3.1<br />
OID popInputTotal 1.3.6.1.4.1.5678.2.1.1.3.2<br />
OID popInputJobs 1.3.6.1.4.1.5678.2.1.1.3.3<br />
OID popTotalRetrievedMessages 1.3.6.1.4.1.5678.2.1.1.3.10<br />
OID popTotalToppedMessages 1.3.6.1.4.1.5678.2.1.1.3.11<br />
OID popTotalDeletedMessages 1.3.6.1.4.1.5678.2.1.1.3.12<br />
OID popTotalSubmittedMessages 1.3.6.1.4.1.5678.2.1.1.3.13<br />
OID popTotalRetrievedBytes 1.3.6.1.4.1.5678.2.1.1.3.14<br />
<br />
OID imapInputActive 1.3.6.1.4.1.5678.2.1.1.4.1<br />
OID imapInputTotal 1.3.6.1.4.1.5678.2.1.1.4.2<br />
OID imapInputJobs 1.3.6.1.4.1.5678.2.1.1.4.3<br />
OID imapMAPIActive 1.3.6.1.4.1.5678.2.1.1.4.5<br />
OID imapTrafficIn 1.3.6.1.4.1.5678.2.1.1.4.8<br />
OID imapTrafficOut 1.3.6.1.4.1.5678.2.1.1.4.9<br />
OID imapTotalSelectedMailboxes 1.3.6.1.4.1.5678.2.1.1.4.10<br />
OID imapTotalStatusMailboxes 1.3.6.1.4.1.5678.2.1.1.4.11<br />
OID imapTotalFetchedMessages 1.3.6.1.4.1.5678.2.1.1.4.12<br />
OID imapTotalStoredMessages 1.3.6.1.4.1.5678.2.1.1.4.13<br />
OID imapTotalDeletedMessages 1.3.6.1.4.1.5678.2.1.1.4.14<br />
OID imapTotalAppendedMessages 1.3.6.1.4.1.5678.2.1.1.4.15<br />
OID imapTotalCopiedMessages 1.3.6.1.4.1.5678.2.1.1.4.16<br />
OID imapTotalParsedMessages 1.3.6.1.4.1.5678.2.1.1.4.17<br />
<br />
OID httpActiveAdmin 1.3.6.1.4.1.5678.2.1.1.5.1<br />
OID httpActiveUser 1.3.6.1.4.1.5678.2.1.1.5.2<br />
OID httpTotalAdmin 1.3.6.1.4.1.5678.2.1.1.5.3<br />
OID httpTotalUser 1.3.6.1.4.1.5678.2.1.1.5.4<br />
OID httpAdminJobs 1.3.6.1.4.1.5678.2.1.1.5.5<br />
OID httpUserJobs 1.3.6.1.4.1.5678.2.1.1.5.6<br />
OID httpTrafficIn 1.3.6.1.4.1.5678.2.1.1.5.8<br />
OID httpTrafficOut 1.3.6.1.4.1.5678.2.1.1.5.9<br />
OID httpRequestsProcessed 1.3.6.1.4.1.5678.2.1.1.5.10<br />
OID httpAuthSucceeded 1.3.6.1.4.1.5678.2.1.1.5.11<br />
OID httpAuthFailed 1.3.6.1.4.1.5678.2.1.1.5.12<br />
OID httpCGIRequestsProcessed 1.3.6.1.4.1.5678.2.1.1.5.13<br />
OID httpRequestBytes 1.3.6.1.4.1.5678.2.1.1.5.14<br />
OID httpResponseBytes 1.3.6.1.4.1.5678.2.1.1.5.15<br />
<br />
OID localDeliveryActive 1.3.6.1.4.1.5678.2.1.1.6.1<br />
OID localDeliveryDeliveredMessages 1.3.6.1.4.1.5678.2.1.1.6.10<br />
OID localDeliveryFailedMessages 1.3.6.1.4.1.5678.2.1.1.6.11<br />
OID localDeliveryDeliveredBytes 1.3.6.1.4.1.5678.2.1.1.6.12<br />
<br />
OID ftpInputActive 1.3.6.1.4.1.5678.2.1.1.7.1<br />
OID ftpInputTotal 1.3.6.1.4.1.5678.2.1.1.7.2<br />
OID ftpInputJobs 1.3.6.1.4.1.5678.2.1.1.7.3<br />
OID ftpTrafficIn 1.3.6.1.4.1.5678.2.1.1.7.8<br />
OID ftpTrafficOut 1.3.6.1.4.1.5678.2.1.1.7.9<br />
OID ftpTotalRetrievedFiles 1.3.6.1.4.1.5678.2.1.1.7.10<br />
OID ftpTotalUploadedFiles 1.3.6.1.4.1.5678.2.1.1.7.11<br />
OID ftpTotalDeletedFiles 1.3.6.1.4.1.5678.2.1.1.7.12<br />
OID ftpTotalRenamedFiles 1.3.6.1.4.1.5678.2.1.1.7.13<br />
OID ftpTotalRetrievedBytes 1.3.6.1.4.1.5678.2.1.1.7.14<br />
OID ftpTotalUploadedBytes 1.3.6.1.4.1.5678.2.1.1.7.15<br />
<br />
OID rpopActive 1.3.6.1.4.1.5678.2.1.1.8.1<br />
OID rpopTotal 1.3.6.1.4.1.5678.2.1.1.8.2<br />
OID rpopJobs 1.3.6.1.4.1.5678.2.1.1.8.3<br />
OID rpopTrafficIn 1.3.6.1.4.1.5678.2.1.1.8.8<br />
OID rpopTrafficOut 1.3.6.1.4.1.5678.2.1.1.8.9<br />
OID rpopMessagesRetrieved 1.3.6.1.4.1.5678.2.1.1.8.10<br />
OID rpopMessageBytesRetrieved 1.3.6.1.4.1.5678.2.1.1.8.11<br />
OID rpopFailedConnections 1.3.6.1.4.1.5678.2.1.1.8.12<br />
OID rpopFailedLogins 1.3.6.1.4.1.5678.2.1.1.8.13<br />
OID rpopFailedSessions 1.3.6.1.4.1.5678.2.1.1.8.14<br />
<br />
OID ldapInputActive 1.3.6.1.4.1.5678.2.1.1.9.1<br />
OID ldapInputTotal 1.3.6.1.4.1.5678.2.1.1.9.2<br />
OID ldapInputJobs 1.3.6.1.4.1.5678.2.1.1.9.3<br />
OID ldapTrafficIn 1.3.6.1.4.1.5678.2.1.1.9.8<br />
OID ldapTrafficOut 1.3.6.1.4.1.5678.2.1.1.9.9<br />
<br />
OID numQueuedMessages 1.3.6.1.4.1.5678.2.1.2.1<br />
OID numOpenedMessages 1.3.6.1.4.1.5678.2.1.2.2<br />
OID totalSubmittedMessages 1.3.6.1.4.1.5678.2.1.2.3<br />
OID totalBadMessages 1.3.6.1.4.1.5678.2.1.2.4<br />
OID totalDeletedMessages 1.3.6.1.4.1.5678.2.1.2.5<br />
OID numEnqueuerMessages 1.3.6.1.4.1.5678.2.1.2.6<br />
OID numDequeuerBatches 1.3.6.1.4.1.5678.2.1.2.7<br />
OID numDequeuerActiveProcessors 1.3.6.1.4.1.5678.2.1.2.8<br />
<br />
OID totalFailedRecipients 1.3.6.1.4.1.5678.2.1.2.20<br />
OID totalRelayedRecipients 1.3.6.1.4.1.5678.2.1.2.21<br />
OID totalDeliveredRecipients 1.3.6.1.4.1.5678.2.1.2.22<br />
OID totalDelayedRecipients 1.3.6.1.4.1.5678.2.1.2.23<br />
OID totalErrorReports 1.3.6.1.4.1.5678.2.1.2.27<br />
OID totalDeliveryReports 1.3.6.1.4.1.5678.2.1.2.28<br />
OID totalWarningReports 1.3.6.1.4.1.5678.2.1.2.29<br />
<br />
OID webUserSessionsOpen 1.3.6.1.4.1.5678.2.1.3.1<br />
OID webUserSessionsProcessed 1.3.6.1.4.1.5678.2.1.3.10<br />
OID webUserRequestsProcessed 1.3.6.1.4.1.5678.2.1.3.11<br />
OID webUserSessionsTimeouted 1.3.6.1.4.1.5678.2.1.3.12<br />
OID wsspPagesComposed 1.3.6.1.4.1.5678.2.1.3.20<br />
OID webMailRead 1.3.6.1.4.1.5678.2.1.3.25<br />
OID webMailComposed 1.3.6.1.4.1.5678.2.1.3.26<br />
<br />
OID numInactiveTLSSessions 1.3.6.1.4.1.5678.2.1.4.1<br />
OID numActiveTLSSessions 1.3.6.1.4.1.5678.2.1.4.2<br />
OID numActiveTLSConnections 1.3.6.1.4.1.5678.2.1.4.3<br />
OID processedTLSSessions 1.3.6.1.4.1.5678.2.1.4.10<br />
<br />
OID successfulAUTHs 1.3.6.1.4.1.5678.2.1.5.1<br />
OID failedAUTHs 1.3.6.1.4.1.5678.2.1.5.2<br />
OID secureAUTHs 1.3.6.1.4.1.5678.2.1.5.3<br />
OID OSbasedAUTHs 1.3.6.1.4.1.5678.2.1.5.10<br />
OID externalAUTHs 1.3.6.1.4.1.5678.2.1.5.11<br />
OID rejectedOnFailureAUTHs 1.3.6.1.4.1.5678.2.1.5.15<br />
OID rejectedOnMethodAUTHs 1.3.6.1.4.1.5678.2.1.5.16<br />
<br />
OID lockerCommandsPending 1.3.6.1.4.1.5678.2.1.6.1.1<br />
OID lockerCommandsTotal 1.3.6.1.4.1.5678.2.1.6.1.2<br />
OID lockerLOCKCommandsTotal 1.3.6.1.4.1.5678.2.1.6.1.3<br />
OID lockerUNLOCKCommandsTotal 1.3.6.1.4.1.5678.2.1.6.1.4<br />
OID lockerFINDCommandsTotal 1.3.6.1.4.1.5678.2.1.6.1.5<br />
OID lockerPATHCommandsTotal 1.3.6.1.4.1.5678.2.1.6.1.6<br />
<br />
OID controllerCommandsTotal 1.3.6.1.4.1.5678.2.1.6.2.1<br />
OID controllerLOCKCommandsTotal 1.3.6.1.4.1.5678.2.1.6.2.2<br />
OID controllerUNLOCKCommandsTotal 1.3.6.1.4.1.5678.2.1.6.2.3<br />
OID controllerFINDCommandsTotal 1.3.6.1.4.1.5678.2.1.6.2.4<br />
OID controllerPATHCommandsTotal 1.3.6.1.4.1.5678.2.1.6.2.5<br />
<br />
OID proxySentToLANudpBytes 1.3.6.1.4.1.5678.2.1.7.1<br />
OID proxySentToWANudpBytes 1.3.6.1.4.1.5678.2.1.7.2<br />
OID proxySentToLANudpPackets 1.3.6.1.4.1.5678.2.1.7.3<br />
OID proxySentToWANudpPackets 1.3.6.1.4.1.5678.2.1.7.4<br />
OID proxySentToLANtcpBytes 1.3.6.1.4.1.5678.2.1.7.10<br />
OID proxySentToWANtcpBytes 1.3.6.1.4.1.5678.2.1.7.11<br />
OID proxyConnectionsToLAN 1.3.6.1.4.1.5678.2.1.7.12<br />
OID proxyConnectionsToWAN 1.3.6.1.4.1.5678.2.1.7.13<br />
<br />
OID sipTrafficIn 1.3.6.1.4.1.5678.2.1.8.1.1<br />
OID sipPacketsIn 1.3.6.1.4.1.5678.2.1.8.1.2<br />
OID sipTrafficOut 1.3.6.1.4.1.5678.2.1.8.1.3<br />
OID sipPacketsOut 1.3.6.1.4.1.5678.2.1.8.1.4<br />
OID sipUDPTrafficIn 1.3.6.1.4.1.5678.2.1.8.1.21<br />
OID sipUDPPacketsIn 1.3.6.1.4.1.5678.2.1.8.1.22<br />
OID sipUDPTrafficOut 1.3.6.1.4.1.5678.2.1.8.1.23<br />
OID sipUDPPacketsOut 1.3.6.1.4.1.5678.2.1.8.1.24<br />
OID sipTCPTrafficIn 1.3.6.1.4.1.5678.2.1.8.1.31<br />
OID sipTCPPacketsIn 1.3.6.1.4.1.5678.2.1.8.1.32<br />
OID sipTCPTrafficOut 1.3.6.1.4.1.5678.2.1.8.1.33<br />
OID sipTCPPacketsOut 1.3.6.1.4.1.5678.2.1.8.1.34<br />
<br />
OID sipActiveServers 1.3.6.1.4.1.5678.2.1.8.2.1<br />
OID sipTotalServers 1.3.6.1.4.1.5678.2.1.8.2.2<br />
OID sipActiveServerEvents 1.3.6.1.4.1.5678.2.1.8.2.3<br />
OID sipTotalServerEvents 1.3.6.1.4.1.5678.2.1.8.2.4<br />
<br />
OID sipActiveClients 1.3.6.1.4.1.5678.2.1.8.3.1<br />
OID sipTotalClients 1.3.6.1.4.1.5678.2.1.8.3.2<br />
OID sipActiveClientEvents 1.3.6.1.4.1.5678.2.1.8.3.3<br />
OID sipTotalClientEvents 1.3.6.1.4.1.5678.2.1.8.3.4<br />
<br />
### DATASOURCES<br />
<br />
datasource smtpInputActive<br />
ds-source = snmp://%snmp%/smtpInputActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource smtpInputTotal<br />
ds-source = snmp://%snmp%/smtpInputTotal<br />
rd-ds-type = GAUGE<br />
<br />
datasource smtpInputJobs<br />
ds-source = snmp://%snmp%/smtpInputJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputTrafficIn<br />
ds-source = snmp://%snmp%/smtpInputTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputTrafficOut<br />
ds-source = snmp://%snmp%/smtpInputTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputMessagesReceived<br />
ds-source = snmp://%snmp%/smtpInputMessagesReceived<br />
rrd-ds-type = COUNTER<br />
desc = "Messages Received by the CommuniGate Pro Host. Data is viewed in Messages per Minute"<br />
rrd-max = 5000<br />
<br />
datasource smtpInputMessageBytesReceived<br />
ds-source = snmp://%snmp%/smtpInputMessageBytesReceived<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputRecipientsAccepted<br />
ds-source = snmp://%snmp%/smtpInputRecipientsAccepted<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputRecipientsRejected<br />
ds-source = snmp://%snmp%/smtpInputRecipientsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputReturnPathsRejected<br />
ds-source = snmp://%snmp%/smtpInputReturnPathsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputDataCommandsRejected<br />
ds-source = snmp://%snmp%/smtpInputDataCommandsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputMessageBodiesRejected<br />
ds-source = snmp://%snmp%/smtpInputMessageBodiesRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputAuthenticationsAccepted<br />
ds-source = snmp://%snmp%/smtpInputAuthenticationsAccepted<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputAuthenticationsRejected<br />
ds-source = snmp://%snmp%/smtpInputAuthenticationsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource smtpOutputActive<br />
ds-source = snmp://%snmp%/smtpOutputActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource smtpOutputTotal<br />
ds-source = snmp://%snmp%/smtpOutputTotal<br />
rrd-ds-type = GAUGE<br />
<br />
datasource smtpOutputJobs<br />
ds-source = snmp://%snmp%/smtpOutputJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputActiveHosts<br />
ds-source = snmp://%snmp%/smtpOutputActiveHosts<br />
rrd-ds-type = GAUGE<br />
<br />
datasource smtpOutputWaitingHosts<br />
ds-source = snmp://%snmp%/smtpOutputWaitingHosts<br />
rrd-ds-type = GAUGE<br />
<br />
datasource smtpOutputTrafficIn<br />
ds-source = snmp://%snmp%/smtpOutputTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputTrafficOut<br />
ds-source = snmp://%snmp%/smtpOutputTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputMessagesSent<br />
ds-source = snmp://%snmp%/smtpOutputMessagesSent<br />
rrd-ds-type = COUNTER<br />
desc = "Messages Sent by the CommuniGate Pro Host. Data is viewed in Messages per Minute"<br />
<br />
datasource smtpOutputMessageBytesSent<br />
ds-source = snmp://%snmp%/smtpOutputMessageBytesSent<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputRecipientsSent<br />
ds-source = snmp://%snmp%/smtpOutputRecipientsSent<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputConnectionsMade<br />
ds-source = snmp://%snmp%/smtpOutputConnectionsMade<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputConnectionsFailed<br />
ds-source = snmp://%snmp%/smtpOutputConnectionsFailed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputRecipientsRejected<br />
ds-source = snmp://%snmp%/smtpOutputRecipientsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputReturnPathsRejected<br />
ds-source = snmp://%snmp%/smtpOutputReturnPathsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputDataCommandsRejected<br />
ds-source = snmp://%snmp%/smtpOutputDataCommandsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputMessageBodiesRejected<br />
ds-source = snmp://%snmp%/smtpOutputMessageBodiesRejected<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource popInputActive<br />
ds-source = snmp://%snmp%/popInputActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource popInputTotal<br />
ds-source = snmp://%snmp%/popInputTotal<br />
rrd-ds-type = GAUGE<br />
<br />
datasource popInputJobs<br />
ds-source = snmp://%snmp%/popInputJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource popTotalRetrievedMessages<br />
ds-source = snmp://%snmp%/popTotalRetrievedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource popTotalToppedMessages<br />
ds-source = snmp://%snmp%/popTotalToppedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource popTotalDeletedMessages<br />
ds-source = snmp://%snmp%/popTotalDeletedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource popTotalSubmittedMessages<br />
ds-source = snmp://%snmp%/popTotalSubmittedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource popTotalRetrievedBytes<br />
ds-source = snmp://%snmp%/popTotalRetrievedBytes<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource imapInputActive<br />
ds-source = snmp://%snmp%/imapInputActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource imapInputTotal<br />
ds-source = snmp://%snmp%/imapInputTotal<br />
rrd-ds-type = GAUGE<br />
<br />
datasource imapInputJobs<br />
ds-source = snmp://%snmp%/imapInputJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapMAPIActive<br />
ds-source = snmp://%snmp%/imapMAPIActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource imapTrafficIn<br />
ds-source = snmp://%snmp%/imapTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTrafficOut<br />
ds-source = snmp://%snmp%/imapTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalSelectedMailboxes<br />
ds-source = snmp://%snmp%/imapTotalSelectedMailboxes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalStatusMailboxes<br />
ds-source = snmp://%snmp%/imapTotalStatusMailboxes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalFetchedMessages<br />
ds-source = snmp://%snmp%/imapTotalFetchedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalStoredMessages<br />
ds-source = snmp://%snmp%/imapTotalStoredMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalDeletedMessages<br />
ds-source = snmp://%snmp%/imapTotalDeletedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalAppendedMessages<br />
ds-source = snmp://%snmp%/imapTotalAppendedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalCopiedMessages<br />
ds-source = snmp://%snmp%/imapTotalCopiedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalParsedMessages<br />
ds-source = snmp://%snmp%/imapTotalParsedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource httpActiveAdmin<br />
ds-source = snmp://%snmp%/httpActiveAdmin<br />
rrd-ds-type = GAUGE<br />
<br />
datasource httpActiveUser<br />
ds-source = snmp://%snmp%/httpActiveUser<br />
rrd-ds-type = GAUGE<br />
<br />
datasource httpTotalAdmin<br />
ds-source = snmp://%snmp%/httpTotalAdmin<br />
rrd-ds-type = GAUGE<br />
<br />
datasource httpTotalUser<br />
ds-source = snmp://%snmp%/httpTotalUser<br />
rrd-ds-type = GAUGE<br />
<br />
datasource httpAdminJobs<br />
ds-source = snmp://%snmp%/httpAdminJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpUserJobs<br />
ds-source = snmp://%snmp%/httpUserJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpTrafficIn<br />
ds-source = snmp://%snmp%/httpTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpTrafficOut<br />
ds-source = snmp://%snmp%/httpTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpRequestsProcessed<br />
ds-source = snmp://%snmp%/httpRequestsProcessed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpAuthSucceeded<br />
ds-source = snmp://%snmp%/httpAuthSucceeded<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpAuthFailed<br />
ds-source = snmp://%snmp%/httpAuthFailed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpCGIRequestsProcessed<br />
ds-source = snmp://%snmp%/httpCGIRequestsProcessed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpRequestBytes<br />
ds-source = snmp://%snmp%/httpRequestBytes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpResponseBytes<br />
ds-source = snmp://%snmp%/httpResponseBytes<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource localDeliveryActive<br />
ds-source = snmp://%snmp%/localDeliveryActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource localDeliveryDeliveredMessages<br />
ds-source = snmp://%snmp%/localDeliveryDeliveredMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource localDeliveryFailedMessages<br />
ds-source = snmp://%snmp%/localDeliveryFailedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource localDeliveryDeliveredBytes<br />
ds-source = snmp://%snmp%/localDeliveryDeliveredBytes<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource ftpInputActive<br />
ds-source = snmp://%snmp%/ftpInputActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource ftpInputTotal<br />
ds-source = snmp://%snmp%/ftpInputTotal<br />
rrd-ds-type = GAUGE<br />
<br />
datasource ftpInputJobs<br />
ds-source = snmp://%snmp%/ftpInputJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTrafficIn<br />
ds-source = snmp://%snmp%/ftpTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTrafficOut<br />
ds-source = snmp://%snmp%/ftpTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTotalRetrievedFiles<br />
ds-source = snmp://%snmp%/ftpTotalRetrievedFiles<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTotalUploadedFiles<br />
ds-source = snmp://%snmp%/ftpTotalUploadedFiles<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTotalDeletedFiles<br />
ds-source = snmp://%snmp%/ftpTotalDeletedFiles<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTotalRenamedFiles<br />
ds-source = snmp://%snmp%/ftpTotalRenamedFiles<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTotalRetrievedBytes<br />
ds-source = snmp://%snmp%/ftpTotalRetrievedBytes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTotalUploadedBytes<br />
ds-source = snmp://%snmp%/ftpTotalUploadedBytes<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource rpopActive<br />
ds-source = snmp://%snmp%/rpopActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource rpopTotal<br />
ds-source = snmp://%snmp%/rpopTotal<br />
rrd-ds-type = GAUGE<br />
<br />
datasource rpopJobs<br />
ds-source = snmp://%snmp%/rpopJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopTrafficIn<br />
ds-source = snmp://%snmp%/rpopTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopTrafficOut<br />
ds-source = snmp://%snmp%/rpopTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopMessagesRetrieved<br />
ds-source = snmp://%snmp%/rpopMessagesRetrieved<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopMessageBytesRetrieved<br />
ds-source = snmp://%snmp%/rpopMessageBytesRetrieved<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopFailedConnections<br />
ds-source = snmp://%snmp%/rpopFailedConnections<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopFailedLogins<br />
ds-source = snmp://%snmp%/rpopFailedLogins<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopFailedSessions<br />
ds-source = snmp://%snmp%/rpopFailedSessions<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource ldapInputActive<br />
ds-source = snmp://%snmp%/ldapInputActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource ldapInputTotal<br />
ds-source = snmp://%snmp%/ldapInputTotal<br />
rrd-ds-type = GAUGE<br />
<br />
datasource ldapInputJobs<br />
ds-source = snmp://%snmp%/ldapInputJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ldapTrafficIn<br />
ds-source = snmp://%snmp%/ldapTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ldapTrafficOut<br />
ds-source = snmp://%snmp%/ldapTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource numQueuedMessages<br />
ds-source = snmp://%snmp%/numQueuedMessages<br />
rrd-ds-type = GAUGE<br />
<br />
datasource numOpenedMessages<br />
ds-source = snmp://%snmp%/numOpenedMessages<br />
rrd-ds-type = GAUGE<br />
<br />
datasource totalSubmittedMessages<br />
ds-source = snmp://%snmp%/totalSubmittedMessages<br />
rrd-ds-type = COUNTER<br />
rrd-max = 5000<br />
<br />
datasource totalBadMessages<br />
ds-source = snmp://%snmp%/totalBadMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalDeletedMessages<br />
ds-source = snmp://%snmp%/totalDeletedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource numEnqueuerMessages<br />
ds-source = snmp://%snmp%/numEnqueuerMessages<br />
rrd-ds-type = GAUGE<br />
<br />
datasource numDequeuerBatches<br />
ds-source = snmp://%snmp%/numDequeuerBatches<br />
rrd-ds-type = GAUGE<br />
<br />
datasource numDequeuerActiveProcessors<br />
ds-source = snmp://%snmp%/numDequeuerActiveProcessors<br />
rrd-ds-type = GAUGE<br />
<br />
<br />
datasource totalFailedRecipients<br />
ds-source = snmp://%snmp%/totalFailedRecipients<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalRelayedRecipients<br />
ds-source = snmp://%snmp%/totalRelayedRecipients<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalDeliveredRecipients<br />
ds-source = snmp://%snmp%/totalDeliveredRecipients<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalDelayedRecipients<br />
ds-source = snmp://%snmp%/totalDelayedRecipients<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalErrorReports<br />
ds-source = snmp://%snmp%/totalErrorReports<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalDeliveryReports<br />
ds-source = snmp://%snmp%/totalDeliveryReports<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalWarningReports<br />
ds-source = snmp://%snmp%/totalWarningReports<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource webUserSessionsOpen<br />
ds-source = snmp://%snmp%/webUserSessionsOpen<br />
rrd-ds-type = GAUGE<br />
<br />
datasource webUserSessionsProcessed<br />
ds-source = snmp://%snmp%/webUserSessionsProcessed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource webUserRequestsProcessed<br />
ds-source = snmp://%snmp%/webUserRequestsProcessed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource webUserSessionsTimeouted<br />
ds-source = snmp://%snmp%/webUserSessionsTimeouted<br />
rrd-ds-type = COUNTER<br />
<br />
datasource wsspPagesComposed<br />
ds-source = snmp://%snmp%/wsspPagesComposed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource webMailRead<br />
ds-source = snmp://%snmp%/webMailRead<br />
rrd-ds-type = COUNTER<br />
<br />
datasource webMailComposed<br />
ds-source = snmp://%snmp%/webMailComposed<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource numInactiveTLSSessions<br />
ds-source = snmp://%snmp%/numInactiveTLSSessions<br />
rrd-ds-type = GAUGE<br />
<br />
datasource numActiveTLSSessions<br />
ds-source = snmp://%snmp%/numActiveTLSSessions<br />
rrd-ds-type = GAUGE<br />
<br />
datasource numActiveTLSConnections<br />
ds-source = snmp://%snmp%/numActiveTLSConnections<br />
rrd-ds-type = GAUGE<br />
<br />
datasource processedTLSSessions<br />
ds-source = snmp://%snmp%/processedTLSSessions<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource successfulAUTHs<br />
ds-source = snmp://%snmp%/successfulAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource failedAUTHs<br />
ds-source = snmp://%snmp%/failedAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource secureAUTHs<br />
ds-source = snmp://%snmp%/secureAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource OSbasedAUTHs<br />
ds-source = snmp://%snmp%/OSbasedAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource externalAUTHs<br />
ds-source = snmp://%snmp%/externalAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rejectedOnFailureAUTHs<br />
ds-source = snmp://%snmp%/rejectedOnFailureAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rejectedOnMethodAUTHs<br />
ds-source = snmp://%snmp%/rejectedOnMethodAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource lockerCommandsPending<br />
ds-source = snmp://%snmp%/lockerCommandsPending<br />
rrd-ds-type = GAUGE<br />
<br />
datasource lockerCommandsTotal<br />
ds-source = snmp://%snmp%/lockerCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource lockerLOCKCommandsTotal<br />
ds-source = snmp://%snmp%/lockerLOCKCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource lockerUNLOCKCommandsTotal<br />
ds-source = snmp://%snmp%/lockerUNLOCKCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource lockerFINDCommandsTotal<br />
ds-source = snmp://%snmp%/lockerFINDCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource lockerPATHCommandsTotal<br />
ds-source = snmp://%snmp%/lockerPATHCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource controllerCommandsTotal<br />
ds-source = snmp://%snmp%/controllerCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource controllerLOCKCommandsTotal<br />
ds-source = snmp://%snmp%/controllerLOCKCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource controllerUNLOCKCommandsTotal<br />
ds-source = snmp://%snmp%/controllerUNLOCKCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource controllerFINDCommandsTotal<br />
ds-source = snmp://%snmp%/controllerFINDCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource controllerPATHCommandsTotal<br />
ds-source = snmp://%snmp%/controllerPATHCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource proxySentToLANudpBytes<br />
ds-source = snmp://%snmp%/proxySentToLANudpBytes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxySentToWANudpBytes<br />
ds-source = snmp://%snmp%/proxySentToWANudpBytes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxySentToLANudpPackets<br />
ds-source = snmp://%snmp%/proxySentToLANudpPackets<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxySentToWANudpPackets<br />
ds-source = snmp://%snmp%/proxySentToWANudpPackets<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxySentToLANtcpBytes<br />
ds-source = snmp://%snmp%/proxySentToLANtcpBytes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxySentToWANtcpBytes<br />
ds-source = snmp://%snmp%/proxySentToWANtcpBytes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxyConnectionsToLAN<br />
ds-source = snmp://%snmp%/proxyConnectionsToLAN<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxyConnectionsToWAN<br />
ds-source = snmp://%snmp%/proxyConnectionsToWAN<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource sipTrafficIn<br />
ds-source = snmp://%snmp%/sipTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipPacketsIn<br />
ds-source = snmp://%snmp%/sipPacketsIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipTrafficOut<br />
ds-source = snmp://%snmp%/sipTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipPacketsOut<br />
ds-source = snmp://%snmp%/sipPacketsOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipUDPTrafficIn<br />
ds-source = snmp://%snmp%/sipUDPTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipUDPPacketsIn<br />
ds-source = snmp://%snmp%/sipUDPPacketsIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipUDPTrafficOut<br />
ds-source = snmp://%snmp%/sipUDPTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipUDPPacketsOut<br />
ds-source = snmp://%snmp%/sipUDPPacketsOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipTCPTrafficIn<br />
ds-source = snmp://%snmp%/sipTCPTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipTCPPacketsIn<br />
ds-source = snmp://%snmp%/sipTCPPacketsIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipTCPTrafficOut<br />
ds-source = snmp://%snmp%/sipTCPTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipTCPPacketsOut<br />
ds-source = snmp://%snmp%/sipTCPPacketsOut<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource sipActiveServers<br />
ds-source = snmp://%snmp%/sipActiveServers<br />
rrd-ds-type = GAUGE<br />
<br />
datasource sipTotalServers<br />
ds-source = snmp://%snmp%/sipTotalServers<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipActiveServerEvents<br />
ds-source = snmp://%snmp%/sipActiveServerEvents<br />
rrd-ds-type = GAUGE<br />
<br />
datasource sipTotalServerEvents<br />
ds-source = snmp://%snmp%/sipTotalServerEvents<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource sipActiveClients<br />
ds-source = snmp://%snmp%/sipActiveClients<br />
rrd-ds-type = GAUGE<br />
<br />
datasource sipTotalClients<br />
ds-source = snmp://%snmp%/sipTotalClients<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipActiveClientEvents<br />
ds-source = snmp://%snmp%/sipActiveClientEvents<br />
rrd-ds-type = GAUGE<br />
<br />
datasource sipTotalClientEvents<br />
ds-source = snmp://%snmp%/sipTotalClientEvents<br />
rrd-ds-type = COUNTER<br />
<br />
# target type definitions<br />
targetType SMTPTraffic<br />
ds = "smtpInputMessagesReceived, smtpOutputMessagesSent, smtpInputMessageBytesReceived, smtpOutputMessageBytesSent, smtpInputTotal, smtpInputActive, smtpOutputTotal, smtpOutputActive, smtpInputJobs, smtpOutputJobs, smtpInputTrafficIn, smtpInputTrafficOut, smtpInputRecipientsAccepted, smtpInputRecipientsRejected, smtpInputReturnPathsRejected, smtpInputDataCommandsRejected, smtpInputMessageBodiesRejected, smtpInputAuthenticationsAccepted, smtpInputAuthenticationsRejected, smtpOutputActiveHosts, smtpOutputWaitingHosts, smtpOutputTrafficIn, smtpOutputTrafficOut, smtpOutputRecipientsSent, smtpOutputConnectionsMade, smtpOutputConnectionsFailed, smtpOutputRecipientsRejected, smtpOutputReturnPathsRejected, smtpOutputDataCommandsRejected, smtpOutputMessageBodiesRejected"<br />
view = "SMTPMessages: smtpInputMessagesReceived smtpOutputMessagesSent,<br />
SMTPBytes: smtpInputMessageBytesReceived smtpOutputMessageBytesSent,<br />
SMTPInput: smtpInputActive smtpInputTotal smtpOutputTotal smtpOutputActive,<br />
SMTPJob: smtpInputJobs smtpOutputJobs,<br />
SMTPHosts: smtpOutputWaitingHosts smtpOutputActiveHosts"<br />
<br />
targetType POPTraffic<br />
ds = "popInputActive, popInputTotal, popInputJobs, popTotalRetrievedMessages, popTotalToppedMessages, popTotalDeletedMessages, popTotalSubmittedMessages, popTotalRetrievedBytes"<br />
view = "POPMessages: popTotalRetrievedMessages,<br />
POPBytes: popTotalRetrievedBytes,<br />
POPInput: popInputTotal popInputActive"<br />
<br />
targetType IMAPTraffic<br />
ds = "imapInputActive, imapInputTotal, imapInputJobs, imapMAPIActive, imapTrafficIn, imapTrafficOut, imapTotalSelectedMailboxes, imapTotalStatusMailboxes, imapTotalFetchedMessages, imapTotalStoredMessages, imapTotalDeletedMessages, imapTotalAppendedMessages, imapTotalCopiedMessages, imapTotalParsedMessages"<br />
view = "IMAPInput: imapInputTotal imapInputActive,<br />
MAPIInput: imapMAPIActive,<br />
IMAPJobs: imapInputJobs,<br />
IMAPTraffic: imapTrafficOut imapTrafficIn,<br />
IMAPMailboxes: imapTotalSelectedMailboxes imapTotalStatusMailboxes,<br />
IMAPMessages: imapTotalStoredMessages imapTotalParsedMessages imapTotalAppendedMessages imapTotalFetchedMessages imapTotalDeletedMessages imapTotalCopiedMessages,<br />
IMAPDownloaded: imapTotalFetchedMessages"<br />
<br />
targetType HTTPTraffic<br />
ds = "httpActiveAdmin, httpActiveUser, httpTotalAdmin, httpTotalUser, httpAdminJobs, httpUserJobs, httpTrafficIn, httpTrafficOut, httpRequestsProcessed, httpAuthSucceeded, httpAuthFailed, httpCGIRequestsProcessed, httpRequestBytes, httpResponseBytes"<br />
view = "HTTPAdmin: httpTotalAdmin httpActiveAdmin,<br />
HTTPUser: httpTotalUser httpActiveUser,<br />
HTTPAdminJobs: httpAdminJobs,<br />
HTTPUserJobs: httpUserJobs,<br />
HTTPTraffic: httpTrafficOut httpTrafficIn,<br />
HTTPRequests: httpRequestsProcessed,<br />
HTTPAuth: httpAuthSucceeded httpAuthFailed,<br />
HTTPData: httpResponseBytes httpRequestBytes"<br />
<br />
targetType LocalDelivery<br />
ds = "localDeliveryActive, localDeliveryDeliveredMessages, localDeliveryFailedMessages, localDeliveryDeliveredBytes"<br />
view = "LocalMessages: localDeliveryDeliveredMessages localDeliveryFailedMessages,<br />
LocalBytes: localDeliveryDeliveredBytes,<br />
LocalActive: localDeliveryActive"<br />
<br />
targetType FTPTraffic<br />
ds = "ftpInputActive, ftpInputTotal, ftpInputJobs, ftpTrafficIn, ftpTrafficOut, ftpTotalRetrievedFiles, ftpTotalUploadedFiles, ftpTotalDeletedFiles, ftpTotalRenamedFiles, ftpTotalRetrievedBytes, ftpTotalUploadedBytes"<br />
<br />
targetType RPOPTraffic<br />
ds = "rpopActive, rpopTotal, rpopJobs, rpopTrafficIn, rpopTrafficOut, rpopMessagesRetrieved, rpopMessageBytesRetrieved, rpopFailedConnections, rpopFailedLogins, rpopFailedSessions"<br />
<br />
targetType LDAPTraffic<br />
ds = "ldapInputActive, ldapInputTotal, ldapInputJobs, ldapTrafficIn, ldapTrafficOut"<br />
view = "Traffic: ldapTrafficOut ldapTrafficIn,<br />
Jobs: ldapInputJobs ldapInputTotal ldapInputActive"<br />
<br />
targetType MessagesTraffic<br />
ds = "numQueuedMessages, numOpenedMessages, totalSubmittedMessages, totalBadMessages, totalDeletedMessages, numEnqueuerMessages, numDequeuerBatches, numDequeuerActiveProcessors"<br />
view = "QueuedMessages: numQueuedMessages,<br />
SubmittedMessages: totalSubmittedMessages totalDeletedMessages totalBadMessages,<br />
Enqueuer: numEnqueuerMessages numDequeuerBatches numDequeuerActiveProcessors"<br />
<br />
targetType TotalTraffic<br />
ds = "totalFailedRecipients, totalRelayedRecipients, totalDeliveredRecipients, totalDelayedRecipients, totalErrorReports, totalDeliveryReports, totalWarningReports"<br />
view = "Recipients: totalDeliveredRecipients totalRelayedRecipients totalFailedRecipients totalDelayedRecipients,<br />
Reports: totalErrorReports totalWarningReports totalDeliveryReports"<br />
<br />
targetType WebUserTraffic<br />
ds = "webUserSessionsOpen, webUserSessionsProcessed, webUserRequestsProcessed, webUserSessionsTimeouted, wsspPagesComposed, webMailRead, webMailComposed"<br />
view = "Sessions: webUserSessionsOpen webUserSessionsProcessed webUserSessionsTimeouted,<br />
Requests: webUserRequestsProcessed,<br />
WsspPages: wsspPagesComposed,<br />
WebMails: webMailRead webMailComposed"<br />
<br />
targetType TLSTraffic<br />
ds = "numInactiveTLSSessions, numActiveTLSSessions, numActiveTLSConnections, processedTLSSessions"<br />
view = "Sessions: numActiveTLSSessions numInactiveTLSSessions numActiveTLSConnections,<br />
Processed: processedTLSSessions"<br />
<br />
targetType AUTHTraffic<br />
ds = "successfulAUTHs, failedAUTHs, secureAUTHs, OSbasedAUTHs, externalAUTHs, rejectedOnFailureAUTHs, rejectedOnMethodAUTHs"<br />
view = "AUTHTraff: successfulAUTHs failedAUTHs rejectedOnFailureAUTHs"<br />
<br />
targetType LockerTraffic<br />
ds = "lockerCommandsPending, lockerCommandsTotal, lockerLOCKCommandsTotal, lockerUNLOCKCommandsTotal, lockerFINDCommandsTotal, lockerPATHCommandsTotal"<br />
<br />
targetType ControllerTraffic<br />
ds = "controllerCommandsTotal, controllerLOCKCommandsTotal, controllerUNLOCKCommandsTotal, controllerFINDCommandsTotal, controllerPATHCommandsTotal"<br />
<br />
targetType ProxyTraffic<br />
ds = "proxySentToLANudpBytes, proxySentToWANudpBytes, proxySentToLANudpPackets, proxySentToWANudpPackets, proxySentToLANtcpBytes, proxySentToWANtcpBytes, proxyConnectionsToLAN, proxyConnectionsToWAN"<br />
<br />
targetType SIPTraffic<br />
ds = "sipTrafficIn, sipPacketsIn, sipTrafficOut, sipPacketsOut, sipUDPTrafficIn, sipUDPPacketsIn, sipUDPTrafficOut, sipUDPPacketsOut, sipTCPTrafficIn, sipTCPPacketsIn, sipTCPTrafficOut, sipTCPPacketsOut, sipActiveServers, sipTotalServers, sipActiveServerEvents, sipTotalServerEvents, sipActiveClients, sipTotalClients, sipActiveClientEvents, sipTotalClientEvents"<br />
<br />
view --default--<br />
paint-nan = TRUE<br />
<br />
# SMTP<br />
#view SMTPMessages<br />
# elements = "smtpInputMessagesReceived smtpOutputMessagesSent"<br />
<br />
#view SMTPBytes<br />
# elements = "smtpInputMessageBytesReceived smtpOutputMessageBytesSent"<br />
<br />
#view SMTPInput"<br />
# elements = "smtpInputActive smtpInputTotal smtpOutputTotal smtpOutputActive"<br />
<br />
#view SMTPJob<br />
# elements = "smtpInputJobs smtpOutputJobs"<br />
<br />
#view SMTPHosts<br />
# elements = "smtpOutputWaitingHosts smtpOutputActiveHosts"<br />
<br />
# POP<br />
#view POPMessages<br />
# elements = "popTotalRetrievedMessages"<br />
<br />
#view POPBytes<br />
# elements = "popTotalRetrievedBytes"<br />
<br />
#view POPInput<br />
# elements = "popInputTotal popInputActive"<br />
<br />
# IMAP<br />
#view IMAPInput<br />
# elements = "imapInputTotal imapInputActive"<br />
<br />
#view MAPIInput<br />
# elements = "imapMAPIActive"<br />
<br />
#view IMAPJobs<br />
# elements = "imapInputJobs"<br />
<br />
#view IMAPTraffic<br />
# elements = "imapTrafficOut imapTrafficIn"<br />
<br />
#view IMAPMailboxes<br />
# elements = "imapTotalSelectedMailboxes imapTotalStatusMailboxes"<br />
<br />
#view IMAPMessages<br />
# elements = "imapTotalStoredMessages imapTotalParsedMessages imapTotalAppendedMessages imapTotalFetchedMessages imapTotalDeletedMessages imapTotalCopiedMessages"<br />
<br />
#view IMAPDownloaded<br />
# elements = "imapTotalFetchedMessages"<br />
<br />
# HTTP<br />
#view HTTPAdmin<br />
# elements = "httpTotalAdmin httpActiveAdmin"<br />
<br />
#view HTTPUser<br />
# elements = "httpTotalUser httpActiveUser"<br />
<br />
#view HTTPAdminJobs<br />
# elements = "httpAdminJobs"<br />
<br />
#view HTTPUserJobs<br />
# elements = "httpUserJobs"<br />
<br />
#view HTTPTraffic<br />
# elements = "httpTrafficOut httpTrafficIn"<br />
<br />
#view HTTPRequests<br />
# elements = "httpRequestsProcessed"<br />
<br />
#view HTTPAuth<br />
# elements = "httpAuthSucceeded httpAuthFailed"<br />
<br />
#view HTTPData<br />
# elements = "httpResponseBytes httpRequestBytes"<br />
<br />
# Local Delivery<br />
#view LocalMessages<br />
# elements = "localDeliveryDeliveredMessages localDeliveryFailedMessages"<br />
<br />
#view LocalBytes<br />
# elements = "localDeliveryDeliveredBytes"<br />
<br />
#view LocalActive<br />
# elements = "localDeliveryActive"<br />
<br />
# LDAP<br />
#view Traffic<br />
# elements = "ldapTrafficOut ldapTrafficIn"<br />
<br />
#view Jobs<br />
# elements = "ldapInputJobs ldapInputTotal ldapInputActive"<br />
<br />
# Messages Traffic<br />
#view QueuedMessages<br />
# elements = "numQueuedMessages"<br />
<br />
#view SubmittedMessages<br />
# elements = "totalSubmittedMessages totalDeletedMessages totalBadMessages"<br />
# y-min = 0<br />
# y-max = 80000<br />
<br />
#view Enqueuer<br />
# elements = "numEnqueuerMessages numDequeuerBatches numDequeuerActiveProcessors"<br />
<br />
#Total Traffic<br />
#view Recipients<br />
# elements = "totalDeliveredRecipients totalRelayedRecipients totalFailedRecipients totalDelayedRecipients"<br />
<br />
#view Reports<br />
# elements = "totalErrorReports totalWarningReports totalDeliveryReports"<br />
<br />
# Web Traffic<br />
#view Sessions<br />
# elements = "webUserSessionsOpen webUserSessionsProcessed webUserSessionsTimeouted"<br />
<br />
#view Requests<br />
# elements = "webUserRequestsProcessed"<br />
<br />
#view WsspPages<br />
# elements = "wsspPagesComposed"<br />
<br />
#view WebMails<br />
# elements = "webMailRead webMailComposed"<br />
<br />
# TLS Sessions<br />
#view Sessions<br />
# elements = "numActiveTLSSessions numInactiveTLSSessions numActiveTLSConnections"<br />
<br />
#view Processed<br />
# elements = "processedTLSSessions"<br />
<br />
# AUTH TRaffic<br />
#view AUTHTraff<br />
# elements = "successfulAUTHs failedAUTHs rejectedOnFailureAUTHs"<br />
<br />
# colors<br />
color dark-green 009c00<br />
color skyblue 00aaff<br />
color bright-red ff2929<br />
color dark-red 9c0000<br />
<br />
# Default Graph values<br />
graph --default--<br />
width = 700<br />
height = 200<br />
interleaved = false<br />
vrule-color = red<br />
use-gprint = true<br />
<br />
# Hosts Active and Waiting<br />
graph smtpOutputActiveHosts<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Active Hosts"<br />
units = "hosts"<br />
legend = "Active Hosts Out"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph smtpOutputWaitingHosts<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Waiting Hosts"<br />
units = "hosts"<br />
legend = "Waiting Hosts Out"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# The Active and Total input / output SMTP connections<br />
graph smtpInputTotal<br />
color = orange<br />
draw-as = LINE1<br />
y-axis = "Connections"<br />
units = "conn"<br />
legend = "Total Input Connections"<br />
show-avg-max = TRUE<br />
<br />
graph smtpInputActive<br />
color = dark-green<br />
draw-as = LINE1<br />
y-axis = "Connections"<br />
units = "conn"<br />
legend = "Active Input Connections"<br />
show-avg-max = TRUE<br />
<br />
graph smtpOutputTotal<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Connections"<br />
units = "conn"<br />
legend = "Total Output Connections"<br />
show-avg-max = TRUE<br />
scale = "-1,*"<br />
<br />
graph smtpOutputActive<br />
color = magenta<br />
draw-as = LINE1<br />
y-axis = "Connections"<br />
units = "conn"<br />
legend = "Active Output Connections"<br />
show-avg-max = TRUE<br />
scale = "-1,*"<br />
<br />
# SMTP jobs running for input<br />
graph smtpInputJobs<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Jobs/Minute"<br />
units = "jbs/m"<br />
legend = "Jobs Input Connections"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph smtpOutputJobs<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Jobs/Minute"<br />
units = "jbs/m"<br />
legend = "Jobs Output Connections"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
scale = "-1,*"<br />
<br />
# SMTP messages sent and received<br />
graph smtpInputMessagesReceived<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Messages/Minute"<br />
units = "msgs/m"<br />
legend = "Messages Received per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph smtpOutputMessagesSent<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Messages/Minute"<br />
units = "msgs/m"<br />
legend = "Messages Sent per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
scale = "-1,*"<br />
<br />
# SMTP Message bytes, sent and received<br />
graph smtpInputMessageBytesReceived<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes Received per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
graph smtpOutputMessageBytesSent<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes Sent per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
scale = "-1,*"<br />
<br />
# POP START<br />
# POP Retrieve Messages<br />
graph popTotalRetrievedMessages<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Messages/Minute"<br />
units = "msg/m"<br />
legend = "Messages per Minute downloaded"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# POP Retrieve Bytes<br />
graph popTotalRetrievedBytes<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes per Minute downloaded"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
# popInputActive popInputTotal<br />
graph popInputTotal<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Total POP"<br />
units = "tot"<br />
legend = "Total POP Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph popInputActive<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Active POP"<br />
units = "act"<br />
legend = "Active POP Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
# POP END<br />
<br />
# IMAP START<br />
# IMAP Total & Active<br />
graph imapInputTotal<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Total Input IMAP"<br />
units = "tot"<br />
legend = "Total IMAP Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph imapInputActive<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Active Input IMAP"<br />
units = "act"<br />
legend = "Active IMAP Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
# MAPI Active<br />
graph imapMAPIActive<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Active MAPI"<br />
units = "act"<br />
legend = "Active MAPI Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
# IMAP jobs<br />
graph imapInputJobs<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "IMAP Input Jobs"<br />
units = "jbs"<br />
legend = "Active IMAP Jobs"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
# IMAP Traffic<br />
graph imapTrafficOut<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "bytes / second"<br />
units = "b/s"<br />
legend = "IMAP Traffic OUT in bytes per second"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
graph imapTrafficIn<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "bytes / second"<br />
units = "b/s"<br />
legend = "IMAP Traffic IN in bytes per second"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
scale = "-1,*"<br />
<br />
# IMAP Mailboxes<br />
graph imapTotalSelectedMailboxes<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "IMAP selected Mailboxes"<br />
units = "bytes"<br />
legend = "IMAP Selected Mailboxes in bytes"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
graph imapTotalStatusMailboxes<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "IMAP Status Mailboxes"<br />
units = "bytes"<br />
legend = "IMAP Status Mailboxes in bytes"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
<br />
# IMAP Downloaded<br />
graph imapTotalFetchedMessages<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "IMAP Fetched Messages"<br />
units = "bytes"<br />
legend = "IMAP fetched messages in bytes"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
<br />
# IMAP other folder stats<br />
graph imapTotalStoredMessages<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "IMAP Stored Messages"<br />
units = "bytes"<br />
legend = "IMAP stored messages in bytes"<br />
show-avg-max = TRUE<br />
bytes = TRUE<br />
<br />
graph imapTotalParsedMessages<br />
color = orange<br />
draw-as = LINE1<br />
y-axis = "IMAP Parsed Messages"<br />
units = "bytes"<br />
legend = "IMAP parsed messages in bytes"<br />
show-avg-max = TRUE<br />
bytes = TRUE<br />
<br />
graph imapTotalAppendedMessages<br />
color = red<br />
draw-as = LINE1<br />
y-axis = "IMAP Appended Messages"<br />
units = "bytes"<br />
legend = "IMAP appended messages in bytes"<br />
show-avg-max = TRUE<br />
bytes = TRUE<br />
<br />
graph imapTotalDeletedMessages<br />
color = yellow<br />
draw-as = LINE1<br />
y-axis = "IMAP Deleted Messages"<br />
units = "bytes"<br />
legend = "IMAP deleted messages in bytes"<br />
show-avg-max = TRUE<br />
bytes = TRUE<br />
<br />
graph imapTotalCopiedMessages<br />
color = neongrn<br />
draw-as = LINE1<br />
y-axis = "IMAP Copied Messages"<br />
units = "bytes"<br />
legend = "IMAP copied messages in bytes"<br />
show-avg-max = TRUE<br />
bytes = TRUE<br />
# IMAP END<br />
<br />
# Deliver / Queued<br />
graph numQueuedMessages<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Queued Messages"<br />
units = "msg"<br />
legend = "Number of Queued Messages"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# Rest of Message Data<br />
graph totalSubmittedMessages<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Submitted Messages"<br />
units = "msg"<br />
legend = "Number of Submitted Messages"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongren<br />
<br />
graph totalDeletedMessages<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Deleted Messages"<br />
units = "msg"<br />
legend = "Number of Deleted Messages"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph totalBadMessages<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Bad Messages"<br />
units = "msg"<br />
legend = "Number of Bad Messages"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
# En/Dequeuer<br />
graph numEnqueuerMessages<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Enqueuer Messages"<br />
units = "m"<br />
legend = "Number of Enqueuer Messages"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph numDequeuerBatches<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Dequeuer Batches"<br />
units = "btch"<br />
legend = "Number of Dequeuer Batches"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph numDequeuerActiveProcessors<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Dequeuer Active Processors"<br />
units = "actv"<br />
legend = "Number of Active Dequeuer Processors"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
# Delivered Message Data<br />
graph totalDeliveredRecipients<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Delivered Recipients"<br />
units = "dlv"<br />
legend = "Number of Delivered Recipients"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph totalRelayedRecipients<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Relayed Recipients"<br />
units = "rlyd"<br />
legend = "Number of Relayed Recipients"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph totalFailedRecipients<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Failed Recipients"<br />
units = "fld"<br />
legend = "Number of Failed Recipients"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
graph totalDelayedRecipients<br />
color = orange<br />
draw-as = LINE1<br />
y-axis = "Delayed Recipients"<br />
units = "dly"<br />
legend = "Number of Delayed Recipients"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = yellow<br />
<br />
# Reports<br />
graph totalErrorReports<br />
color = dark-red<br />
draw-as = AREA<br />
y-axis = "Error Reports"<br />
units = "err"<br />
legend = "Number of Error Reports"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
graph totalWarningReports<br />
color = orange<br />
draw-as = LINE1<br />
y-axis = "Warning Reports"<br />
units = "wrn"<br />
legend = "Number of Warning Reports"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = yellow<br />
<br />
graph totalDeliveryReports<br />
color = dark-green<br />
draw-as = LINE1<br />
y-axis = "Delivery Reports"<br />
units = "dlv"<br />
legend = "Number of Delivery Reports"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# LDAP START<br />
# Traffic<br />
graph ldapTrafficOut<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes LDAP Out Traffic per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
graph ldapTrafficIn<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes LDAP In Traffic per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
scale = "-1,*"<br />
<br />
# Jobs<br />
graph ldapInputJobs<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Jobs"<br />
units = "jbs"<br />
legend = "Number of Input Jobs"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph ldapInputTotal<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Input Total"<br />
units = "ttl"<br />
legend = "Number of Total Input"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph ldapInputActive<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Input Active"<br />
units = "act"<br />
legend = "Number of Input Active"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
# LDAP END<br />
<br />
# TLS START<br />
# TLS Sessions / Connections<br />
graph numActiveTLSSessions<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Active TLS Sessions"<br />
units = "act"<br />
legend = "Number of Active TLS Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph numInactiveTLSSessions<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Inactive TLS Sessions"<br />
units = "inact"<br />
legend = "Number of Inactive TLS Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph numActiveTLSConnections<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Active TLS Connections"<br />
units = "conn"<br />
legend = "Number of Active TLS Connections"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
# Processed TLS Sessions<br />
graph processedTLSSessions<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Processed TLS Sessions"<br />
units = "act"<br />
legend = "Number of Processed TLS Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
# TLS END<br />
<br />
# AUTH START<br />
graph successfulAUTHs<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Successful Auths"<br />
units = "auth/ok"<br />
legend = "Successful Authentications"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph failedAUTHs<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Failed Auths"<br />
units = "auth/fld"<br />
legend = "Failed Authentications"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
graph rejectedOnFailureAUTHs<br />
color = orange<br />
draw-as = LINE1<br />
y-axis = "Rejected Failed Auths"<br />
units = "rjct"<br />
legend = "Rejected on Failed Authentications"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = yellow<br />
# END START<br />
<br />
# WEB PAGES START<br />
graph webUserSessionsProcessed<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Sessions Processed"<br />
units = "prc"<br />
legend = "Web User Sessions Processed"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph webUserSessionsTimeouted<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Sessions Timeouted"<br />
units = "to"<br />
legend = "Web User Sessions Timeouted"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
graph webUserSessionsOpen<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Sessions Open"<br />
units = "open"<br />
legend = "Web User Sessions Open"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# Requests Processed<br />
graph webUserRequestsProcessed<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Requests Processed"<br />
units = "req"<br />
legend = "Number of Web User Requests Processed"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# WSSP Pages Composed<br />
graph wsspPagesComposed<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Pages Composed"<br />
units = "pgs"<br />
legend = "Number of WSSP Pages Composed"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# Web mail<br />
graph webMailRead<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Mail Read"<br />
units = "r"<br />
legend = "Mails Read in Web Interface"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph webMailComposed<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Mail Composed"<br />
units = "w"<br />
legend = "Mails Composed in Web Interface"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
# WEB PAGES END<br />
<br />
# LOCAL DELIVERY START<br />
graph localDeliveryDeliveredMessages<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Local Delivered"<br />
units = "dlv"<br />
legend = "Mails Local Delivery Agent and Delivered"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph localDeliveryFailedMessages<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Local Failed"<br />
units = "fld"<br />
legend = "Mails Local Delivery Agent and Failed"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
# Local Bytes Delivered<br />
graph localDeliveryDeliveredBytes<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Bytes"<br />
units = "b"<br />
legend = "Local Delivered Bytes"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# Active<br />
graph localDeliveryActive<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Active Local"<br />
units = "act"<br />
legend = "Active Local Delivery"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
# LOCAL DELIVERY END<br />
<br />
# HTTP DATA START<br />
# Admin<br />
graph httpTotalAdmin<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Admin Total"<br />
units = "tot"<br />
legend = "Admin Total Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph httpActiveAdmin<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Admin Active"<br />
units = "act"<br />
legend = "Admin Active Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph httpAdminJobs<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Admin Jobs"<br />
units = "jbs"<br />
legend = "Admin Total Jobs"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# User<br />
graph httpTotalUser<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "User Total"<br />
units = "tot"<br />
legend = "User Total Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph httpActiveUser<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "User Active"<br />
units = "act"<br />
legend = "User Active Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph httpUserJobs<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "User Jobs"<br />
units = "jbs"<br />
legend = "User Total Jobs"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# HTTP Traffic<br />
graph httpTrafficOut<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes HTTP Out Traffic per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
graph httpTrafficIn<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes HTTP In Traffic per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
scale = "-1,*"<br />
<br />
# HTTP Requests<br />
graph httpRequestsProcessed<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Requests Processed"<br />
units = "req"<br />
legend = "HTTP Requests Processed"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# Authentication<br />
graph httpAuthSucceeded<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Auth Succeeded"<br />
units = "succ"<br />
legend = "HTTP Authentication Succeeded"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph httpAuthFailed<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Auth Failed"<br />
units = "fld"<br />
legend = "HTTP Authentication Failed"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
# Response Bytes<br />
graph httpResponseBytes<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Bytes"<br />
units = "b"<br />
legend = "Bytes HTTP Out Traffic"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
graph httpRequestBytes<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Bytes"<br />
units = "b"<br />
legend = "Bytes HTTP In Traffic"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
scale = "-1,*"<br />
# HTTP DATA END<br />
</pre><br />
<br />
the ''servers'' configuration file which belongs into a subdirectory to the ''Defaults'' config file<br />
<pre><br />
Target --default--<br />
server = "<ip>"<br />
community = "<snmp community string>"<br />
directory-desc = "<directory description>"<br />
<br />
Target SMTP-Data<br />
target-type = SMTPTraffic<br />
display-name = "SMTP Traffic Analyses"<br />
target-short-desc = "SMTP Messages and Bytes, sent & received"<br />
short-desc = "<b>SMTPMessages</b>: Messages Recieved and Sent per Minute<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=smtpInputMessagesReceived,smtpOutputMessagesSent;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>SMTPBytes</b>: Bytes Recieved and Sent per Minute<br><b>SMTPInput</b>: Active and Total Input/Output connections<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=smtpInputActive,smtpInputTotal,smtpOutputTotal,smtpOutputActive;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>SMTPJobs</b>: Running Input/Output Jobs per Minute<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=smtpInputMessageBytesReceived,smtpOutputMessageBytesSent;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>SMTPHosts</b>: Waiting and Active Hosts (Out)<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=smtpOutputWaitingHosts,smtpOutputActiveHosts;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\">"<br />
<br />
Target POP-Data<br />
target-type = POPTraffic<br />
display-name = "POP Traffic Analyses"<br />
target-short-desc = "POP Messages and Bytes, sent & received"<br />
short-desc = "<b>POPMessages</b>: Messages downloaded per Minute<br><b>POPBytes</b>: Bytes transfered per Minute<br><b>POPJobs</b>: Total and Active POP Sessions<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=popInputTotal,popInputActive;range=151200;rand=754;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\">"<br />
<br />
Target IMAP-Data<br />
target-type = IMAPTraffic<br />
display-name = "IMAP Traffic Analyses"<br />
target-short-desc = "IMAP Messages and Bytes, sent & received"<br />
short-desc = "<b>IMAPInput</b>: Total and Active IMAP Sessions<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=imapInputTotal,imapInputActive;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>MAPIInput</b>: Active MAPI Sessions<br><b>IMAPJobs</b>: Active IMAP Jobs<br><b>IMAPTraffic</b>: IN/OUT Traffic in bytes per Minute<br><b>IMAPMailboxes</b>: Selected Mailboxes and Sstatus Mailboxes<br><b>IMAPMessages</b>: Stores, Parsed, Appended, Fetched, Deleted and Copied Messages in Bytes<br><b>IMAPDownloaded</b>: Fetched Messages in Bytes"<br />
<br />
Target HTTP-Data<br />
target-type = HTTPTraffic<br />
display-name = "HTTP Traffic Analyses"<br />
target-short-desc = "HTTP Messages and Bytes, sent & received"<br />
short-desc = "<b>HTTPAdmin</b>: Admin Users who access<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=httpTotalAdmin,httpActiveAdmin;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>HTTPUser</b>: Normal Users Sessions<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=httpTotalUser,httpActiveUser;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>HTTPAdminJobs</b>: Server Processes for Admin Access<br><b>HTTPUserJobs</b>: Server Processes for User Jobs<br><b>HTTPTraffic</b>: Traffic per Minute<br><b>HTTPRequests</b>: Amount of Requests to the Server<br><b>HTTPAuth</b>: Amount of HTTP Authentications<br><b>HTTPData</b>: Data transfered"<br />
<br />
Target Local-Data<br />
target-type = LocalDelivery<br />
display-name = "Local Traffic Analyses"<br />
target-short-desc = "Local Messages and Bytes, sent & received"<br />
short-desc = "<b>LocalMessages</b>: Delivered and Failed<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=localDeliveryDeliveredMessages,localDeliveryFailedMessages;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>LocalBytes</b>: Bytes delivered<br><b>LocalActive</b>: Active Local"<br />
<br />
#Target RPOP-Data<br />
# target-type = RPOPTraffic<br />
# display-name = "Remote POP Traffic Analyses"<br />
# target-short-desc = "Remote POP Messages and Bytes, sent & received"<br />
<br />
Target LDAP-Data<br />
target-type = LDAPTraffic<br />
display-name = "LDAP Traffic Analyses"<br />
target-short-desc = "LDAP Messages and Bytes, sent & received"<br />
short-desc = "<b>Traffic</b>: Bytes per Minute<br><b>Jobs</b>: Input running, Total Input and Active Input"<br />
<br />
Target Messages-Data<br />
target-type = MessagesTraffic<br />
display-name = "Messages Traffic Analyses"<br />
target-short-desc = "Messages and Bytes, sent & received"<br />
short-desc = "<b>QueuedMessages</b>: Number of currently Queued Messages<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=numQueuedMessages;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>SubmittedMessages</b>: Submitted, Deleted and Bad Messages<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=totalSubmittedMessages,totalDeletedMessages,totalBadMessages;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>Enqueuer</b>: Enqueuer Messages, Dequeuer Batchs and Active Dequeue Processes<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=numEnqueuerMessages,numDequeuerBatches,numDequeuerActiveProcessors;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\">"<br />
<br />
Target Total-Data<br />
target-type = TotalTraffic<br />
display-name = "Total Traffic Analyses"<br />
target-short-desc = "Total Messages and Bytes, sent & received"<br />
short-desc = "<b>Recipients</b>: Delivered, Relayed, Failed and Delayed Recipients<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=totalDeliveredRecipients,totalRelayedRecipients,totalFailedRecipients,totalDelayedRecipients;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>Reports</b>: Error, Warning and Deliverey Reports<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=totalErrorReports,totalWarningReports,totalDeliveryReports;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\">"<br />
<br />
Target Web-Data<br />
target-type = WebUserTraffic<br />
display-name = "Web User Traffic Analyses"<br />
target-short-desc = "Web USer Messages and Bytes, sent & received"<br />
short-desc = "<b>Session:</b>: Web User Sessions Processed, Timedouted and Open<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=webUserSessionsOpen,webUserSessionsProcessed,webUserSessionsTimeouted;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>Requests</b>: User Requests<br><b>WsspPages</b>: WSSP Pages composed (created)<br><b>WebMails</b>: Read and Composed mails in web interface"<br />
<br />
Target TLS-Data<br />
target-type = TLSTraffic<br />
display-name = "TLS Traffic Analyses"<br />
target-short-desc = "TLS Messages and Bytes, sent & received"<br />
short-desc = "<b>Sessions</b>: Active, Inactive TLS Sessions and Active TLS Connections<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=numActiveTLSSessions,numInactiveTLSSessions,numActiveTLSConnections;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>Processed</b>: Number of Processes TLS Sessions"<br />
<br />
Target AUTH-Data<br />
target-type = AUTHTraffic<br />
display-name = "AUTH Traffic Analyses"<br />
target-short-desc = "AUTH Messages and Bytes, sent & received"<br />
short-desc = "<b>AuthTraff</b>: Successful, Failed and Rejected on Failed Authentications<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=successfulAUTHs,failedAUTHs,rejectedOnFailureAUTHs;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\">"<br />
</pre></div>Gullevekhttps://amd.co.at/adminwiki/Cricket/config_cgproCricket/config cgpro2006-05-26T01:41:32Z<p>Gullevek: cricket communigate pro config</p>
<hr />
<div>The ''Default'' file<br />
<pre><br />
# set ts=4<br />
#<br />
# CommuniGate Pro Defaults<br />
# a mirror of the mrtg file<br />
# by Clemens Schwaighofer, 2005/05/10<br />
# 2005/05/30 (cs) added stats (avg,max, etc) to each graph<br />
# 2005/05/26 (cs) added different (1min) rrd file definitions<br />
# 2005/05/17 (cs) added more description<br />
# 2005/05/10 ~ 2005/05/16 (cs) write all OID, Type definitions, test<br />
<br />
# we define totaly different heartbeats for our rrd<br />
<br />
# one point per 1 minutes, spanning 6h,<br />
rra 1minAve AVERAGE:0:1:360<br />
# one point per 5 minutes, spanning 50 hours<br />
rra 5minAve AVERAGE:0.5:5:600<br />
# one point per 30 minutes, spanning 12 days<br />
rra 30minAve AVERAGE:0.5:30:600<br />
# get max for 1 hr<br />
rra 1hrMax MAX:0.5:60:600<br />
# one point every 2 hours, spanning 50 days<br />
rra 2hrAve AVERAGE:0.5:120:600<br />
rra 2hrMax MAX:0.5:120:600<br />
# one point every day, spanning 600 days<br />
rra 1dayAve AVERAGE:0.5:1440:600<br />
rra 1dayMax MAX:0.5:1440:600<br />
<br />
# we will add datasources to each specific target-type later<br />
targetType --default--<br />
rra = "1minAve, 5minAve, 30minAve, 1hrMax, 2hrAve, 2hrMax, 1dayAve, 1dayMax"<br />
<br />
# default targt definitions<br />
Target --default--<br />
server = ""<br />
community = ""<br />
snmp-host = %server%<br />
snmp-community = %community%<br />
#snmp = %snmp-community%@%snmp-host%:%snmp-port%:%snmp-timeout%:%snmp-retries%:%snmp-backoff%:%snmp-version%<br />
snmp = %snmp-community%@%snmp-host%:%snmp-port%<br />
display-name = "%auto-target-name% on %server%"<br />
directory-desc = "Communigate Pro Mail Server Monitoring"<br />
min-size = 0<br />
max-size = 1250000<br />
target-type = undef<br />
# we do polling every minute (60 seconds)<br />
rrd-poll-interval = 60<br />
<br />
OID smtpInputActive 1.3.6.1.4.1.5678.2.1.1.1.1<br />
OID smtpInputTotal 1.3.6.1.4.1.5678.2.1.1.1.2<br />
OID smtpInputJobs 1.3.6.1.4.1.5678.2.1.1.1.3<br />
OID smtpInputTrafficIn 1.3.6.1.4.1.5678.2.1.1.1.8<br />
OID smtpInputTrafficOut 1.3.6.1.4.1.5678.2.1.1.1.9<br />
OID smtpInputMessagesReceived 1.3.6.1.4.1.5678.2.1.1.1.10<br />
OID smtpInputMessageBytesReceived 1.3.6.1.4.1.5678.2.1.1.1.11<br />
OID smtpInputRecipientsAccepted 1.3.6.1.4.1.5678.2.1.1.1.12<br />
OID smtpInputRecipientsRejected 1.3.6.1.4.1.5678.2.1.1.1.13<br />
OID smtpInputReturnPathsRejected 1.3.6.1.4.1.5678.2.1.1.1.14<br />
OID smtpInputDataCommandsRejected 1.3.6.1.4.1.5678.2.1.1.1.15<br />
OID smtpInputMessageBodiesRejected 1.3.6.1.4.1.5678.2.1.1.1.16<br />
OID smtpInputAuthenticationsAccepted 1.3.6.1.4.1.5678.2.1.1.1.17<br />
OID smtpInputAuthenticationsRejected 1.3.6.1.4.1.5678.2.1.1.1.18<br />
<br />
OID smtpOutputActive 1.3.6.1.4.1.5678.2.1.1.2.1<br />
OID smtpOutputTotal 1.3.6.1.4.1.5678.2.1.1.2.2<br />
OID smtpOutputJobs 1.3.6.1.4.1.5678.2.1.1.2.3<br />
OID smtpOutputActiveHosts 1.3.6.1.4.1.5678.2.1.1.2.4<br />
OID smtpOutputWaitingHosts 1.3.6.1.4.1.5678.2.1.1.2.5<br />
OID smtpOutputTrafficIn 1.3.6.1.4.1.5678.2.1.1.2.8<br />
OID smtpOutputTrafficOut 1.3.6.1.4.1.5678.2.1.1.2.9<br />
OID smtpOutputMessagesSent 1.3.6.1.4.1.5678.2.1.1.2.10<br />
OID smtpOutputMessageBytesSent 1.3.6.1.4.1.5678.2.1.1.2.11<br />
OID smtpOutputRecipientsSent 1.3.6.1.4.1.5678.2.1.1.2.12<br />
OID smtpOutputConnectionsMade 1.3.6.1.4.1.5678.2.1.1.2.13<br />
OID smtpOutputConnectionsFailed 1.3.6.1.4.1.5678.2.1.1.2.14<br />
OID smtpOutputRecipientsRejected 1.3.6.1.4.1.5678.2.1.1.2.15<br />
OID smtpOutputReturnPathsRejected 1.3.6.1.4.1.5678.2.1.1.2.16<br />
OID smtpOutputDataCommandsRejected 1.3.6.1.4.1.5678.2.1.1.2.17<br />
OID smtpOutputMessageBodiesRejected 1.3.6.1.4.1.5678.2.1.1.2.18<br />
<br />
OID popInputActive 1.3.6.1.4.1.5678.2.1.1.3.1<br />
OID popInputTotal 1.3.6.1.4.1.5678.2.1.1.3.2<br />
OID popInputJobs 1.3.6.1.4.1.5678.2.1.1.3.3<br />
OID popTotalRetrievedMessages 1.3.6.1.4.1.5678.2.1.1.3.10<br />
OID popTotalToppedMessages 1.3.6.1.4.1.5678.2.1.1.3.11<br />
OID popTotalDeletedMessages 1.3.6.1.4.1.5678.2.1.1.3.12<br />
OID popTotalSubmittedMessages 1.3.6.1.4.1.5678.2.1.1.3.13<br />
OID popTotalRetrievedBytes 1.3.6.1.4.1.5678.2.1.1.3.14<br />
<br />
OID imapInputActive 1.3.6.1.4.1.5678.2.1.1.4.1<br />
OID imapInputTotal 1.3.6.1.4.1.5678.2.1.1.4.2<br />
OID imapInputJobs 1.3.6.1.4.1.5678.2.1.1.4.3<br />
OID imapMAPIActive 1.3.6.1.4.1.5678.2.1.1.4.5<br />
OID imapTrafficIn 1.3.6.1.4.1.5678.2.1.1.4.8<br />
OID imapTrafficOut 1.3.6.1.4.1.5678.2.1.1.4.9<br />
OID imapTotalSelectedMailboxes 1.3.6.1.4.1.5678.2.1.1.4.10<br />
OID imapTotalStatusMailboxes 1.3.6.1.4.1.5678.2.1.1.4.11<br />
OID imapTotalFetchedMessages 1.3.6.1.4.1.5678.2.1.1.4.12<br />
OID imapTotalStoredMessages 1.3.6.1.4.1.5678.2.1.1.4.13<br />
OID imapTotalDeletedMessages 1.3.6.1.4.1.5678.2.1.1.4.14<br />
OID imapTotalAppendedMessages 1.3.6.1.4.1.5678.2.1.1.4.15<br />
OID imapTotalCopiedMessages 1.3.6.1.4.1.5678.2.1.1.4.16<br />
OID imapTotalParsedMessages 1.3.6.1.4.1.5678.2.1.1.4.17<br />
<br />
OID httpActiveAdmin 1.3.6.1.4.1.5678.2.1.1.5.1<br />
OID httpActiveUser 1.3.6.1.4.1.5678.2.1.1.5.2<br />
OID httpTotalAdmin 1.3.6.1.4.1.5678.2.1.1.5.3<br />
OID httpTotalUser 1.3.6.1.4.1.5678.2.1.1.5.4<br />
OID httpAdminJobs 1.3.6.1.4.1.5678.2.1.1.5.5<br />
OID httpUserJobs 1.3.6.1.4.1.5678.2.1.1.5.6<br />
OID httpTrafficIn 1.3.6.1.4.1.5678.2.1.1.5.8<br />
OID httpTrafficOut 1.3.6.1.4.1.5678.2.1.1.5.9<br />
OID httpRequestsProcessed 1.3.6.1.4.1.5678.2.1.1.5.10<br />
OID httpAuthSucceeded 1.3.6.1.4.1.5678.2.1.1.5.11<br />
OID httpAuthFailed 1.3.6.1.4.1.5678.2.1.1.5.12<br />
OID httpCGIRequestsProcessed 1.3.6.1.4.1.5678.2.1.1.5.13<br />
OID httpRequestBytes 1.3.6.1.4.1.5678.2.1.1.5.14<br />
OID httpResponseBytes 1.3.6.1.4.1.5678.2.1.1.5.15<br />
<br />
OID localDeliveryActive 1.3.6.1.4.1.5678.2.1.1.6.1<br />
OID localDeliveryDeliveredMessages 1.3.6.1.4.1.5678.2.1.1.6.10<br />
OID localDeliveryFailedMessages 1.3.6.1.4.1.5678.2.1.1.6.11<br />
OID localDeliveryDeliveredBytes 1.3.6.1.4.1.5678.2.1.1.6.12<br />
<br />
OID ftpInputActive 1.3.6.1.4.1.5678.2.1.1.7.1<br />
OID ftpInputTotal 1.3.6.1.4.1.5678.2.1.1.7.2<br />
OID ftpInputJobs 1.3.6.1.4.1.5678.2.1.1.7.3<br />
OID ftpTrafficIn 1.3.6.1.4.1.5678.2.1.1.7.8<br />
OID ftpTrafficOut 1.3.6.1.4.1.5678.2.1.1.7.9<br />
OID ftpTotalRetrievedFiles 1.3.6.1.4.1.5678.2.1.1.7.10<br />
OID ftpTotalUploadedFiles 1.3.6.1.4.1.5678.2.1.1.7.11<br />
OID ftpTotalDeletedFiles 1.3.6.1.4.1.5678.2.1.1.7.12<br />
OID ftpTotalRenamedFiles 1.3.6.1.4.1.5678.2.1.1.7.13<br />
OID ftpTotalRetrievedBytes 1.3.6.1.4.1.5678.2.1.1.7.14<br />
OID ftpTotalUploadedBytes 1.3.6.1.4.1.5678.2.1.1.7.15<br />
<br />
OID rpopActive 1.3.6.1.4.1.5678.2.1.1.8.1<br />
OID rpopTotal 1.3.6.1.4.1.5678.2.1.1.8.2<br />
OID rpopJobs 1.3.6.1.4.1.5678.2.1.1.8.3<br />
OID rpopTrafficIn 1.3.6.1.4.1.5678.2.1.1.8.8<br />
OID rpopTrafficOut 1.3.6.1.4.1.5678.2.1.1.8.9<br />
OID rpopMessagesRetrieved 1.3.6.1.4.1.5678.2.1.1.8.10<br />
OID rpopMessageBytesRetrieved 1.3.6.1.4.1.5678.2.1.1.8.11<br />
OID rpopFailedConnections 1.3.6.1.4.1.5678.2.1.1.8.12<br />
OID rpopFailedLogins 1.3.6.1.4.1.5678.2.1.1.8.13<br />
OID rpopFailedSessions 1.3.6.1.4.1.5678.2.1.1.8.14<br />
<br />
OID ldapInputActive 1.3.6.1.4.1.5678.2.1.1.9.1<br />
OID ldapInputTotal 1.3.6.1.4.1.5678.2.1.1.9.2<br />
OID ldapInputJobs 1.3.6.1.4.1.5678.2.1.1.9.3<br />
OID ldapTrafficIn 1.3.6.1.4.1.5678.2.1.1.9.8<br />
OID ldapTrafficOut 1.3.6.1.4.1.5678.2.1.1.9.9<br />
<br />
OID numQueuedMessages 1.3.6.1.4.1.5678.2.1.2.1<br />
OID numOpenedMessages 1.3.6.1.4.1.5678.2.1.2.2<br />
OID totalSubmittedMessages 1.3.6.1.4.1.5678.2.1.2.3<br />
OID totalBadMessages 1.3.6.1.4.1.5678.2.1.2.4<br />
OID totalDeletedMessages 1.3.6.1.4.1.5678.2.1.2.5<br />
OID numEnqueuerMessages 1.3.6.1.4.1.5678.2.1.2.6<br />
OID numDequeuerBatches 1.3.6.1.4.1.5678.2.1.2.7<br />
OID numDequeuerActiveProcessors 1.3.6.1.4.1.5678.2.1.2.8<br />
<br />
OID totalFailedRecipients 1.3.6.1.4.1.5678.2.1.2.20<br />
OID totalRelayedRecipients 1.3.6.1.4.1.5678.2.1.2.21<br />
OID totalDeliveredRecipients 1.3.6.1.4.1.5678.2.1.2.22<br />
OID totalDelayedRecipients 1.3.6.1.4.1.5678.2.1.2.23<br />
OID totalErrorReports 1.3.6.1.4.1.5678.2.1.2.27<br />
OID totalDeliveryReports 1.3.6.1.4.1.5678.2.1.2.28<br />
OID totalWarningReports 1.3.6.1.4.1.5678.2.1.2.29<br />
<br />
OID webUserSessionsOpen 1.3.6.1.4.1.5678.2.1.3.1<br />
OID webUserSessionsProcessed 1.3.6.1.4.1.5678.2.1.3.10<br />
OID webUserRequestsProcessed 1.3.6.1.4.1.5678.2.1.3.11<br />
OID webUserSessionsTimeouted 1.3.6.1.4.1.5678.2.1.3.12<br />
OID wsspPagesComposed 1.3.6.1.4.1.5678.2.1.3.20<br />
OID webMailRead 1.3.6.1.4.1.5678.2.1.3.25<br />
OID webMailComposed 1.3.6.1.4.1.5678.2.1.3.26<br />
<br />
OID numInactiveTLSSessions 1.3.6.1.4.1.5678.2.1.4.1<br />
OID numActiveTLSSessions 1.3.6.1.4.1.5678.2.1.4.2<br />
OID numActiveTLSConnections 1.3.6.1.4.1.5678.2.1.4.3<br />
OID processedTLSSessions 1.3.6.1.4.1.5678.2.1.4.10<br />
<br />
OID successfulAUTHs 1.3.6.1.4.1.5678.2.1.5.1<br />
OID failedAUTHs 1.3.6.1.4.1.5678.2.1.5.2<br />
OID secureAUTHs 1.3.6.1.4.1.5678.2.1.5.3<br />
OID OSbasedAUTHs 1.3.6.1.4.1.5678.2.1.5.10<br />
OID externalAUTHs 1.3.6.1.4.1.5678.2.1.5.11<br />
OID rejectedOnFailureAUTHs 1.3.6.1.4.1.5678.2.1.5.15<br />
OID rejectedOnMethodAUTHs 1.3.6.1.4.1.5678.2.1.5.16<br />
<br />
OID lockerCommandsPending 1.3.6.1.4.1.5678.2.1.6.1.1<br />
OID lockerCommandsTotal 1.3.6.1.4.1.5678.2.1.6.1.2<br />
OID lockerLOCKCommandsTotal 1.3.6.1.4.1.5678.2.1.6.1.3<br />
OID lockerUNLOCKCommandsTotal 1.3.6.1.4.1.5678.2.1.6.1.4<br />
OID lockerFINDCommandsTotal 1.3.6.1.4.1.5678.2.1.6.1.5<br />
OID lockerPATHCommandsTotal 1.3.6.1.4.1.5678.2.1.6.1.6<br />
<br />
OID controllerCommandsTotal 1.3.6.1.4.1.5678.2.1.6.2.1<br />
OID controllerLOCKCommandsTotal 1.3.6.1.4.1.5678.2.1.6.2.2<br />
OID controllerUNLOCKCommandsTotal 1.3.6.1.4.1.5678.2.1.6.2.3<br />
OID controllerFINDCommandsTotal 1.3.6.1.4.1.5678.2.1.6.2.4<br />
OID controllerPATHCommandsTotal 1.3.6.1.4.1.5678.2.1.6.2.5<br />
<br />
OID proxySentToLANudpBytes 1.3.6.1.4.1.5678.2.1.7.1<br />
OID proxySentToWANudpBytes 1.3.6.1.4.1.5678.2.1.7.2<br />
OID proxySentToLANudpPackets 1.3.6.1.4.1.5678.2.1.7.3<br />
OID proxySentToWANudpPackets 1.3.6.1.4.1.5678.2.1.7.4<br />
OID proxySentToLANtcpBytes 1.3.6.1.4.1.5678.2.1.7.10<br />
OID proxySentToWANtcpBytes 1.3.6.1.4.1.5678.2.1.7.11<br />
OID proxyConnectionsToLAN 1.3.6.1.4.1.5678.2.1.7.12<br />
OID proxyConnectionsToWAN 1.3.6.1.4.1.5678.2.1.7.13<br />
<br />
OID sipTrafficIn 1.3.6.1.4.1.5678.2.1.8.1.1<br />
OID sipPacketsIn 1.3.6.1.4.1.5678.2.1.8.1.2<br />
OID sipTrafficOut 1.3.6.1.4.1.5678.2.1.8.1.3<br />
OID sipPacketsOut 1.3.6.1.4.1.5678.2.1.8.1.4<br />
OID sipUDPTrafficIn 1.3.6.1.4.1.5678.2.1.8.1.21<br />
OID sipUDPPacketsIn 1.3.6.1.4.1.5678.2.1.8.1.22<br />
OID sipUDPTrafficOut 1.3.6.1.4.1.5678.2.1.8.1.23<br />
OID sipUDPPacketsOut 1.3.6.1.4.1.5678.2.1.8.1.24<br />
OID sipTCPTrafficIn 1.3.6.1.4.1.5678.2.1.8.1.31<br />
OID sipTCPPacketsIn 1.3.6.1.4.1.5678.2.1.8.1.32<br />
OID sipTCPTrafficOut 1.3.6.1.4.1.5678.2.1.8.1.33<br />
OID sipTCPPacketsOut 1.3.6.1.4.1.5678.2.1.8.1.34<br />
<br />
OID sipActiveServers 1.3.6.1.4.1.5678.2.1.8.2.1<br />
OID sipTotalServers 1.3.6.1.4.1.5678.2.1.8.2.2<br />
OID sipActiveServerEvents 1.3.6.1.4.1.5678.2.1.8.2.3<br />
OID sipTotalServerEvents 1.3.6.1.4.1.5678.2.1.8.2.4<br />
<br />
OID sipActiveClients 1.3.6.1.4.1.5678.2.1.8.3.1<br />
OID sipTotalClients 1.3.6.1.4.1.5678.2.1.8.3.2<br />
OID sipActiveClientEvents 1.3.6.1.4.1.5678.2.1.8.3.3<br />
OID sipTotalClientEvents 1.3.6.1.4.1.5678.2.1.8.3.4<br />
<br />
### DATASOURCES<br />
<br />
datasource smtpInputActive<br />
ds-source = snmp://%snmp%/smtpInputActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource smtpInputTotal<br />
ds-source = snmp://%snmp%/smtpInputTotal<br />
rd-ds-type = GAUGE<br />
<br />
datasource smtpInputJobs<br />
ds-source = snmp://%snmp%/smtpInputJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputTrafficIn<br />
ds-source = snmp://%snmp%/smtpInputTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputTrafficOut<br />
ds-source = snmp://%snmp%/smtpInputTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputMessagesReceived<br />
ds-source = snmp://%snmp%/smtpInputMessagesReceived<br />
rrd-ds-type = COUNTER<br />
desc = "Messages Received by the CommuniGate Pro Host. Data is viewed in Messages per Minute"<br />
rrd-max = 5000<br />
<br />
datasource smtpInputMessageBytesReceived<br />
ds-source = snmp://%snmp%/smtpInputMessageBytesReceived<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputRecipientsAccepted<br />
ds-source = snmp://%snmp%/smtpInputRecipientsAccepted<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputRecipientsRejected<br />
ds-source = snmp://%snmp%/smtpInputRecipientsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputReturnPathsRejected<br />
ds-source = snmp://%snmp%/smtpInputReturnPathsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputDataCommandsRejected<br />
ds-source = snmp://%snmp%/smtpInputDataCommandsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputMessageBodiesRejected<br />
ds-source = snmp://%snmp%/smtpInputMessageBodiesRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputAuthenticationsAccepted<br />
ds-source = snmp://%snmp%/smtpInputAuthenticationsAccepted<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpInputAuthenticationsRejected<br />
ds-source = snmp://%snmp%/smtpInputAuthenticationsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource smtpOutputActive<br />
ds-source = snmp://%snmp%/smtpOutputActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource smtpOutputTotal<br />
ds-source = snmp://%snmp%/smtpOutputTotal<br />
rrd-ds-type = GAUGE<br />
<br />
datasource smtpOutputJobs<br />
ds-source = snmp://%snmp%/smtpOutputJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputActiveHosts<br />
ds-source = snmp://%snmp%/smtpOutputActiveHosts<br />
rrd-ds-type = GAUGE<br />
<br />
datasource smtpOutputWaitingHosts<br />
ds-source = snmp://%snmp%/smtpOutputWaitingHosts<br />
rrd-ds-type = GAUGE<br />
<br />
datasource smtpOutputTrafficIn<br />
ds-source = snmp://%snmp%/smtpOutputTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputTrafficOut<br />
ds-source = snmp://%snmp%/smtpOutputTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputMessagesSent<br />
ds-source = snmp://%snmp%/smtpOutputMessagesSent<br />
rrd-ds-type = COUNTER<br />
desc = "Messages Sent by the CommuniGate Pro Host. Data is viewed in Messages per Minute"<br />
<br />
datasource smtpOutputMessageBytesSent<br />
ds-source = snmp://%snmp%/smtpOutputMessageBytesSent<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputRecipientsSent<br />
ds-source = snmp://%snmp%/smtpOutputRecipientsSent<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputConnectionsMade<br />
ds-source = snmp://%snmp%/smtpOutputConnectionsMade<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputConnectionsFailed<br />
ds-source = snmp://%snmp%/smtpOutputConnectionsFailed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputRecipientsRejected<br />
ds-source = snmp://%snmp%/smtpOutputRecipientsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputReturnPathsRejected<br />
ds-source = snmp://%snmp%/smtpOutputReturnPathsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputDataCommandsRejected<br />
ds-source = snmp://%snmp%/smtpOutputDataCommandsRejected<br />
rrd-ds-type = COUNTER<br />
<br />
datasource smtpOutputMessageBodiesRejected<br />
ds-source = snmp://%snmp%/smtpOutputMessageBodiesRejected<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource popInputActive<br />
ds-source = snmp://%snmp%/popInputActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource popInputTotal<br />
ds-source = snmp://%snmp%/popInputTotal<br />
rrd-ds-type = GAUGE<br />
<br />
datasource popInputJobs<br />
ds-source = snmp://%snmp%/popInputJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource popTotalRetrievedMessages<br />
ds-source = snmp://%snmp%/popTotalRetrievedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource popTotalToppedMessages<br />
ds-source = snmp://%snmp%/popTotalToppedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource popTotalDeletedMessages<br />
ds-source = snmp://%snmp%/popTotalDeletedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource popTotalSubmittedMessages<br />
ds-source = snmp://%snmp%/popTotalSubmittedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource popTotalRetrievedBytes<br />
ds-source = snmp://%snmp%/popTotalRetrievedBytes<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource imapInputActive<br />
ds-source = snmp://%snmp%/imapInputActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource imapInputTotal<br />
ds-source = snmp://%snmp%/imapInputTotal<br />
rrd-ds-type = GAUGE<br />
<br />
datasource imapInputJobs<br />
ds-source = snmp://%snmp%/imapInputJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapMAPIActive<br />
ds-source = snmp://%snmp%/imapMAPIActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource imapTrafficIn<br />
ds-source = snmp://%snmp%/imapTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTrafficOut<br />
ds-source = snmp://%snmp%/imapTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalSelectedMailboxes<br />
ds-source = snmp://%snmp%/imapTotalSelectedMailboxes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalStatusMailboxes<br />
ds-source = snmp://%snmp%/imapTotalStatusMailboxes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalFetchedMessages<br />
ds-source = snmp://%snmp%/imapTotalFetchedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalStoredMessages<br />
ds-source = snmp://%snmp%/imapTotalStoredMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalDeletedMessages<br />
ds-source = snmp://%snmp%/imapTotalDeletedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalAppendedMessages<br />
ds-source = snmp://%snmp%/imapTotalAppendedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalCopiedMessages<br />
ds-source = snmp://%snmp%/imapTotalCopiedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource imapTotalParsedMessages<br />
ds-source = snmp://%snmp%/imapTotalParsedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource httpActiveAdmin<br />
ds-source = snmp://%snmp%/httpActiveAdmin<br />
rrd-ds-type = GAUGE<br />
<br />
datasource httpActiveUser<br />
ds-source = snmp://%snmp%/httpActiveUser<br />
rrd-ds-type = GAUGE<br />
<br />
datasource httpTotalAdmin<br />
ds-source = snmp://%snmp%/httpTotalAdmin<br />
rrd-ds-type = GAUGE<br />
<br />
datasource httpTotalUser<br />
ds-source = snmp://%snmp%/httpTotalUser<br />
rrd-ds-type = GAUGE<br />
<br />
datasource httpAdminJobs<br />
ds-source = snmp://%snmp%/httpAdminJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpUserJobs<br />
ds-source = snmp://%snmp%/httpUserJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpTrafficIn<br />
ds-source = snmp://%snmp%/httpTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpTrafficOut<br />
ds-source = snmp://%snmp%/httpTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpRequestsProcessed<br />
ds-source = snmp://%snmp%/httpRequestsProcessed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpAuthSucceeded<br />
ds-source = snmp://%snmp%/httpAuthSucceeded<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpAuthFailed<br />
ds-source = snmp://%snmp%/httpAuthFailed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpCGIRequestsProcessed<br />
ds-source = snmp://%snmp%/httpCGIRequestsProcessed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpRequestBytes<br />
ds-source = snmp://%snmp%/httpRequestBytes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource httpResponseBytes<br />
ds-source = snmp://%snmp%/httpResponseBytes<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource localDeliveryActive<br />
ds-source = snmp://%snmp%/localDeliveryActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource localDeliveryDeliveredMessages<br />
ds-source = snmp://%snmp%/localDeliveryDeliveredMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource localDeliveryFailedMessages<br />
ds-source = snmp://%snmp%/localDeliveryFailedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource localDeliveryDeliveredBytes<br />
ds-source = snmp://%snmp%/localDeliveryDeliveredBytes<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource ftpInputActive<br />
ds-source = snmp://%snmp%/ftpInputActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource ftpInputTotal<br />
ds-source = snmp://%snmp%/ftpInputTotal<br />
rrd-ds-type = GAUGE<br />
<br />
datasource ftpInputJobs<br />
ds-source = snmp://%snmp%/ftpInputJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTrafficIn<br />
ds-source = snmp://%snmp%/ftpTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTrafficOut<br />
ds-source = snmp://%snmp%/ftpTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTotalRetrievedFiles<br />
ds-source = snmp://%snmp%/ftpTotalRetrievedFiles<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTotalUploadedFiles<br />
ds-source = snmp://%snmp%/ftpTotalUploadedFiles<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTotalDeletedFiles<br />
ds-source = snmp://%snmp%/ftpTotalDeletedFiles<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTotalRenamedFiles<br />
ds-source = snmp://%snmp%/ftpTotalRenamedFiles<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTotalRetrievedBytes<br />
ds-source = snmp://%snmp%/ftpTotalRetrievedBytes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ftpTotalUploadedBytes<br />
ds-source = snmp://%snmp%/ftpTotalUploadedBytes<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource rpopActive<br />
ds-source = snmp://%snmp%/rpopActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource rpopTotal<br />
ds-source = snmp://%snmp%/rpopTotal<br />
rrd-ds-type = GAUGE<br />
<br />
datasource rpopJobs<br />
ds-source = snmp://%snmp%/rpopJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopTrafficIn<br />
ds-source = snmp://%snmp%/rpopTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopTrafficOut<br />
ds-source = snmp://%snmp%/rpopTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopMessagesRetrieved<br />
ds-source = snmp://%snmp%/rpopMessagesRetrieved<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopMessageBytesRetrieved<br />
ds-source = snmp://%snmp%/rpopMessageBytesRetrieved<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopFailedConnections<br />
ds-source = snmp://%snmp%/rpopFailedConnections<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopFailedLogins<br />
ds-source = snmp://%snmp%/rpopFailedLogins<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rpopFailedSessions<br />
ds-source = snmp://%snmp%/rpopFailedSessions<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource ldapInputActive<br />
ds-source = snmp://%snmp%/ldapInputActive<br />
rrd-ds-type = GAUGE<br />
<br />
datasource ldapInputTotal<br />
ds-source = snmp://%snmp%/ldapInputTotal<br />
rrd-ds-type = GAUGE<br />
<br />
datasource ldapInputJobs<br />
ds-source = snmp://%snmp%/ldapInputJobs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ldapTrafficIn<br />
ds-source = snmp://%snmp%/ldapTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource ldapTrafficOut<br />
ds-source = snmp://%snmp%/ldapTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource numQueuedMessages<br />
ds-source = snmp://%snmp%/numQueuedMessages<br />
rrd-ds-type = GAUGE<br />
<br />
datasource numOpenedMessages<br />
ds-source = snmp://%snmp%/numOpenedMessages<br />
rrd-ds-type = GAUGE<br />
<br />
datasource totalSubmittedMessages<br />
ds-source = snmp://%snmp%/totalSubmittedMessages<br />
rrd-ds-type = COUNTER<br />
rrd-max = 5000<br />
<br />
datasource totalBadMessages<br />
ds-source = snmp://%snmp%/totalBadMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalDeletedMessages<br />
ds-source = snmp://%snmp%/totalDeletedMessages<br />
rrd-ds-type = COUNTER<br />
<br />
datasource numEnqueuerMessages<br />
ds-source = snmp://%snmp%/numEnqueuerMessages<br />
rrd-ds-type = GAUGE<br />
<br />
datasource numDequeuerBatches<br />
ds-source = snmp://%snmp%/numDequeuerBatches<br />
rrd-ds-type = GAUGE<br />
<br />
datasource numDequeuerActiveProcessors<br />
ds-source = snmp://%snmp%/numDequeuerActiveProcessors<br />
rrd-ds-type = GAUGE<br />
<br />
<br />
datasource totalFailedRecipients<br />
ds-source = snmp://%snmp%/totalFailedRecipients<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalRelayedRecipients<br />
ds-source = snmp://%snmp%/totalRelayedRecipients<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalDeliveredRecipients<br />
ds-source = snmp://%snmp%/totalDeliveredRecipients<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalDelayedRecipients<br />
ds-source = snmp://%snmp%/totalDelayedRecipients<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalErrorReports<br />
ds-source = snmp://%snmp%/totalErrorReports<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalDeliveryReports<br />
ds-source = snmp://%snmp%/totalDeliveryReports<br />
rrd-ds-type = COUNTER<br />
<br />
datasource totalWarningReports<br />
ds-source = snmp://%snmp%/totalWarningReports<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource webUserSessionsOpen<br />
ds-source = snmp://%snmp%/webUserSessionsOpen<br />
rrd-ds-type = GAUGE<br />
<br />
datasource webUserSessionsProcessed<br />
ds-source = snmp://%snmp%/webUserSessionsProcessed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource webUserRequestsProcessed<br />
ds-source = snmp://%snmp%/webUserRequestsProcessed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource webUserSessionsTimeouted<br />
ds-source = snmp://%snmp%/webUserSessionsTimeouted<br />
rrd-ds-type = COUNTER<br />
<br />
datasource wsspPagesComposed<br />
ds-source = snmp://%snmp%/wsspPagesComposed<br />
rrd-ds-type = COUNTER<br />
<br />
datasource webMailRead<br />
ds-source = snmp://%snmp%/webMailRead<br />
rrd-ds-type = COUNTER<br />
<br />
datasource webMailComposed<br />
ds-source = snmp://%snmp%/webMailComposed<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource numInactiveTLSSessions<br />
ds-source = snmp://%snmp%/numInactiveTLSSessions<br />
rrd-ds-type = GAUGE<br />
<br />
datasource numActiveTLSSessions<br />
ds-source = snmp://%snmp%/numActiveTLSSessions<br />
rrd-ds-type = GAUGE<br />
<br />
datasource numActiveTLSConnections<br />
ds-source = snmp://%snmp%/numActiveTLSConnections<br />
rrd-ds-type = GAUGE<br />
<br />
datasource processedTLSSessions<br />
ds-source = snmp://%snmp%/processedTLSSessions<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource successfulAUTHs<br />
ds-source = snmp://%snmp%/successfulAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource failedAUTHs<br />
ds-source = snmp://%snmp%/failedAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource secureAUTHs<br />
ds-source = snmp://%snmp%/secureAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource OSbasedAUTHs<br />
ds-source = snmp://%snmp%/OSbasedAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource externalAUTHs<br />
ds-source = snmp://%snmp%/externalAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rejectedOnFailureAUTHs<br />
ds-source = snmp://%snmp%/rejectedOnFailureAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
datasource rejectedOnMethodAUTHs<br />
ds-source = snmp://%snmp%/rejectedOnMethodAUTHs<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource lockerCommandsPending<br />
ds-source = snmp://%snmp%/lockerCommandsPending<br />
rrd-ds-type = GAUGE<br />
<br />
datasource lockerCommandsTotal<br />
ds-source = snmp://%snmp%/lockerCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource lockerLOCKCommandsTotal<br />
ds-source = snmp://%snmp%/lockerLOCKCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource lockerUNLOCKCommandsTotal<br />
ds-source = snmp://%snmp%/lockerUNLOCKCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource lockerFINDCommandsTotal<br />
ds-source = snmp://%snmp%/lockerFINDCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource lockerPATHCommandsTotal<br />
ds-source = snmp://%snmp%/lockerPATHCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource controllerCommandsTotal<br />
ds-source = snmp://%snmp%/controllerCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource controllerLOCKCommandsTotal<br />
ds-source = snmp://%snmp%/controllerLOCKCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource controllerUNLOCKCommandsTotal<br />
ds-source = snmp://%snmp%/controllerUNLOCKCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource controllerFINDCommandsTotal<br />
ds-source = snmp://%snmp%/controllerFINDCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
datasource controllerPATHCommandsTotal<br />
ds-source = snmp://%snmp%/controllerPATHCommandsTotal<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource proxySentToLANudpBytes<br />
ds-source = snmp://%snmp%/proxySentToLANudpBytes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxySentToWANudpBytes<br />
ds-source = snmp://%snmp%/proxySentToWANudpBytes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxySentToLANudpPackets<br />
ds-source = snmp://%snmp%/proxySentToLANudpPackets<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxySentToWANudpPackets<br />
ds-source = snmp://%snmp%/proxySentToWANudpPackets<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxySentToLANtcpBytes<br />
ds-source = snmp://%snmp%/proxySentToLANtcpBytes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxySentToWANtcpBytes<br />
ds-source = snmp://%snmp%/proxySentToWANtcpBytes<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxyConnectionsToLAN<br />
ds-source = snmp://%snmp%/proxyConnectionsToLAN<br />
rrd-ds-type = COUNTER<br />
<br />
datasource proxyConnectionsToWAN<br />
ds-source = snmp://%snmp%/proxyConnectionsToWAN<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource sipTrafficIn<br />
ds-source = snmp://%snmp%/sipTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipPacketsIn<br />
ds-source = snmp://%snmp%/sipPacketsIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipTrafficOut<br />
ds-source = snmp://%snmp%/sipTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipPacketsOut<br />
ds-source = snmp://%snmp%/sipPacketsOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipUDPTrafficIn<br />
ds-source = snmp://%snmp%/sipUDPTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipUDPPacketsIn<br />
ds-source = snmp://%snmp%/sipUDPPacketsIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipUDPTrafficOut<br />
ds-source = snmp://%snmp%/sipUDPTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipUDPPacketsOut<br />
ds-source = snmp://%snmp%/sipUDPPacketsOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipTCPTrafficIn<br />
ds-source = snmp://%snmp%/sipTCPTrafficIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipTCPPacketsIn<br />
ds-source = snmp://%snmp%/sipTCPPacketsIn<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipTCPTrafficOut<br />
ds-source = snmp://%snmp%/sipTCPTrafficOut<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipTCPPacketsOut<br />
ds-source = snmp://%snmp%/sipTCPPacketsOut<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource sipActiveServers<br />
ds-source = snmp://%snmp%/sipActiveServers<br />
rrd-ds-type = GAUGE<br />
<br />
datasource sipTotalServers<br />
ds-source = snmp://%snmp%/sipTotalServers<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipActiveServerEvents<br />
ds-source = snmp://%snmp%/sipActiveServerEvents<br />
rrd-ds-type = GAUGE<br />
<br />
datasource sipTotalServerEvents<br />
ds-source = snmp://%snmp%/sipTotalServerEvents<br />
rrd-ds-type = COUNTER<br />
<br />
<br />
datasource sipActiveClients<br />
ds-source = snmp://%snmp%/sipActiveClients<br />
rrd-ds-type = GAUGE<br />
<br />
datasource sipTotalClients<br />
ds-source = snmp://%snmp%/sipTotalClients<br />
rrd-ds-type = COUNTER<br />
<br />
datasource sipActiveClientEvents<br />
ds-source = snmp://%snmp%/sipActiveClientEvents<br />
rrd-ds-type = GAUGE<br />
<br />
datasource sipTotalClientEvents<br />
ds-source = snmp://%snmp%/sipTotalClientEvents<br />
rrd-ds-type = COUNTER<br />
<br />
# target type definitions<br />
targetType SMTPTraffic<br />
ds = "smtpInputMessagesReceived, smtpOutputMessagesSent, smtpInputMessageBytesReceived, smtpOutputMessageBytesSent, smtpInputTotal, smtpInputActive, smtpOutputTotal, smtpOutputActive, smtpInputJobs, smtpOutputJobs, smtpInputTrafficIn, smtpInputTrafficOut, smtpInputRecipientsAccepted, smtpInputRecipientsRejected, smtpInputReturnPathsRejected, smtpInputDataCommandsRejected, smtpInputMessageBodiesRejected, smtpInputAuthenticationsAccepted, smtpInputAuthenticationsRejected, smtpOutputActiveHosts, smtpOutputWaitingHosts, smtpOutputTrafficIn, smtpOutputTrafficOut, smtpOutputRecipientsSent, smtpOutputConnectionsMade, smtpOutputConnectionsFailed, smtpOutputRecipientsRejected, smtpOutputReturnPathsRejected, smtpOutputDataCommandsRejected, smtpOutputMessageBodiesRejected"<br />
view = "SMTPMessages: smtpInputMessagesReceived smtpOutputMessagesSent,<br />
SMTPBytes: smtpInputMessageBytesReceived smtpOutputMessageBytesSent,<br />
SMTPInput: smtpInputActive smtpInputTotal smtpOutputTotal smtpOutputActive,<br />
SMTPJob: smtpInputJobs smtpOutputJobs,<br />
SMTPHosts: smtpOutputWaitingHosts smtpOutputActiveHosts"<br />
<br />
targetType POPTraffic<br />
ds = "popInputActive, popInputTotal, popInputJobs, popTotalRetrievedMessages, popTotalToppedMessages, popTotalDeletedMessages, popTotalSubmittedMessages, popTotalRetrievedBytes"<br />
view = "POPMessages: popTotalRetrievedMessages,<br />
POPBytes: popTotalRetrievedBytes,<br />
POPInput: popInputTotal popInputActive"<br />
<br />
targetType IMAPTraffic<br />
ds = "imapInputActive, imapInputTotal, imapInputJobs, imapMAPIActive, imapTrafficIn, imapTrafficOut, imapTotalSelectedMailboxes, imapTotalStatusMailboxes, imapTotalFetchedMessages, imapTotalStoredMessages, imapTotalDeletedMessages, imapTotalAppendedMessages, imapTotalCopiedMessages, imapTotalParsedMessages"<br />
view = "IMAPInput: imapInputTotal imapInputActive,<br />
MAPIInput: imapMAPIActive,<br />
IMAPJobs: imapInputJobs,<br />
IMAPTraffic: imapTrafficOut imapTrafficIn,<br />
IMAPMailboxes: imapTotalSelectedMailboxes imapTotalStatusMailboxes,<br />
IMAPMessages: imapTotalStoredMessages imapTotalParsedMessages imapTotalAppendedMessages imapTotalFetchedMessages imapTotalDeletedMessages imapTotalCopiedMessages,<br />
IMAPDownloaded: imapTotalFetchedMessages"<br />
<br />
targetType HTTPTraffic<br />
ds = "httpActiveAdmin, httpActiveUser, httpTotalAdmin, httpTotalUser, httpAdminJobs, httpUserJobs, httpTrafficIn, httpTrafficOut, httpRequestsProcessed, httpAuthSucceeded, httpAuthFailed, httpCGIRequestsProcessed, httpRequestBytes, httpResponseBytes"<br />
view = "HTTPAdmin: httpTotalAdmin httpActiveAdmin,<br />
HTTPUser: httpTotalUser httpActiveUser,<br />
HTTPAdminJobs: httpAdminJobs,<br />
HTTPUserJobs: httpUserJobs,<br />
HTTPTraffic: httpTrafficOut httpTrafficIn,<br />
HTTPRequests: httpRequestsProcessed,<br />
HTTPAuth: httpAuthSucceeded httpAuthFailed,<br />
HTTPData: httpResponseBytes httpRequestBytes"<br />
<br />
targetType LocalDelivery<br />
ds = "localDeliveryActive, localDeliveryDeliveredMessages, localDeliveryFailedMessages, localDeliveryDeliveredBytes"<br />
view = "LocalMessages: localDeliveryDeliveredMessages localDeliveryFailedMessages,<br />
LocalBytes: localDeliveryDeliveredBytes,<br />
LocalActive: localDeliveryActive"<br />
<br />
targetType FTPTraffic<br />
ds = "ftpInputActive, ftpInputTotal, ftpInputJobs, ftpTrafficIn, ftpTrafficOut, ftpTotalRetrievedFiles, ftpTotalUploadedFiles, ftpTotalDeletedFiles, ftpTotalRenamedFiles, ftpTotalRetrievedBytes, ftpTotalUploadedBytes"<br />
<br />
targetType RPOPTraffic<br />
ds = "rpopActive, rpopTotal, rpopJobs, rpopTrafficIn, rpopTrafficOut, rpopMessagesRetrieved, rpopMessageBytesRetrieved, rpopFailedConnections, rpopFailedLogins, rpopFailedSessions"<br />
<br />
targetType LDAPTraffic<br />
ds = "ldapInputActive, ldapInputTotal, ldapInputJobs, ldapTrafficIn, ldapTrafficOut"<br />
view = "Traffic: ldapTrafficOut ldapTrafficIn,<br />
Jobs: ldapInputJobs ldapInputTotal ldapInputActive"<br />
<br />
targetType MessagesTraffic<br />
ds = "numQueuedMessages, numOpenedMessages, totalSubmittedMessages, totalBadMessages, totalDeletedMessages, numEnqueuerMessages, numDequeuerBatches, numDequeuerActiveProcessors"<br />
view = "QueuedMessages: numQueuedMessages,<br />
SubmittedMessages: totalSubmittedMessages totalDeletedMessages totalBadMessages,<br />
Enqueuer: numEnqueuerMessages numDequeuerBatches numDequeuerActiveProcessors"<br />
<br />
targetType TotalTraffic<br />
ds = "totalFailedRecipients, totalRelayedRecipients, totalDeliveredRecipients, totalDelayedRecipients, totalErrorReports, totalDeliveryReports, totalWarningReports"<br />
view = "Recipients: totalDeliveredRecipients totalRelayedRecipients totalFailedRecipients totalDelayedRecipients,<br />
Reports: totalErrorReports totalWarningReports totalDeliveryReports"<br />
<br />
targetType WebUserTraffic<br />
ds = "webUserSessionsOpen, webUserSessionsProcessed, webUserRequestsProcessed, webUserSessionsTimeouted, wsspPagesComposed, webMailRead, webMailComposed"<br />
view = "Sessions: webUserSessionsOpen webUserSessionsProcessed webUserSessionsTimeouted,<br />
Requests: webUserRequestsProcessed,<br />
WsspPages: wsspPagesComposed,<br />
WebMails: webMailRead webMailComposed"<br />
<br />
targetType TLSTraffic<br />
ds = "numInactiveTLSSessions, numActiveTLSSessions, numActiveTLSConnections, processedTLSSessions"<br />
view = "Sessions: numActiveTLSSessions numInactiveTLSSessions numActiveTLSConnections,<br />
Processed: processedTLSSessions"<br />
<br />
targetType AUTHTraffic<br />
ds = "successfulAUTHs, failedAUTHs, secureAUTHs, OSbasedAUTHs, externalAUTHs, rejectedOnFailureAUTHs, rejectedOnMethodAUTHs"<br />
view = "AUTHTraff: successfulAUTHs failedAUTHs rejectedOnFailureAUTHs"<br />
<br />
targetType LockerTraffic<br />
ds = "lockerCommandsPending, lockerCommandsTotal, lockerLOCKCommandsTotal, lockerUNLOCKCommandsTotal, lockerFINDCommandsTotal, lockerPATHCommandsTotal"<br />
<br />
targetType ControllerTraffic<br />
ds = "controllerCommandsTotal, controllerLOCKCommandsTotal, controllerUNLOCKCommandsTotal, controllerFINDCommandsTotal, controllerPATHCommandsTotal"<br />
<br />
targetType ProxyTraffic<br />
ds = "proxySentToLANudpBytes, proxySentToWANudpBytes, proxySentToLANudpPackets, proxySentToWANudpPackets, proxySentToLANtcpBytes, proxySentToWANtcpBytes, proxyConnectionsToLAN, proxyConnectionsToWAN"<br />
<br />
targetType SIPTraffic<br />
ds = "sipTrafficIn, sipPacketsIn, sipTrafficOut, sipPacketsOut, sipUDPTrafficIn, sipUDPPacketsIn, sipUDPTrafficOut, sipUDPPacketsOut, sipTCPTrafficIn, sipTCPPacketsIn, sipTCPTrafficOut, sipTCPPacketsOut, sipActiveServers, sipTotalServers, sipActiveServerEvents, sipTotalServerEvents, sipActiveClients, sipTotalClients, sipActiveClientEvents, sipTotalClientEvents"<br />
<br />
view --default--<br />
paint-nan = TRUE<br />
<br />
# SMTP<br />
#view SMTPMessages<br />
# elements = "smtpInputMessagesReceived smtpOutputMessagesSent"<br />
<br />
#view SMTPBytes<br />
# elements = "smtpInputMessageBytesReceived smtpOutputMessageBytesSent"<br />
<br />
#view SMTPInput"<br />
# elements = "smtpInputActive smtpInputTotal smtpOutputTotal smtpOutputActive"<br />
<br />
#view SMTPJob<br />
# elements = "smtpInputJobs smtpOutputJobs"<br />
<br />
#view SMTPHosts<br />
# elements = "smtpOutputWaitingHosts smtpOutputActiveHosts"<br />
<br />
# POP<br />
#view POPMessages<br />
# elements = "popTotalRetrievedMessages"<br />
<br />
#view POPBytes<br />
# elements = "popTotalRetrievedBytes"<br />
<br />
#view POPInput<br />
# elements = "popInputTotal popInputActive"<br />
<br />
# IMAP<br />
#view IMAPInput<br />
# elements = "imapInputTotal imapInputActive"<br />
<br />
#view MAPIInput<br />
# elements = "imapMAPIActive"<br />
<br />
#view IMAPJobs<br />
# elements = "imapInputJobs"<br />
<br />
#view IMAPTraffic<br />
# elements = "imapTrafficOut imapTrafficIn"<br />
<br />
#view IMAPMailboxes<br />
# elements = "imapTotalSelectedMailboxes imapTotalStatusMailboxes"<br />
<br />
#view IMAPMessages<br />
# elements = "imapTotalStoredMessages imapTotalParsedMessages imapTotalAppendedMessages imapTotalFetchedMessages imapTotalDeletedMessages imapTotalCopiedMessages"<br />
<br />
#view IMAPDownloaded<br />
# elements = "imapTotalFetchedMessages"<br />
<br />
# HTTP<br />
#view HTTPAdmin<br />
# elements = "httpTotalAdmin httpActiveAdmin"<br />
<br />
#view HTTPUser<br />
# elements = "httpTotalUser httpActiveUser"<br />
<br />
#view HTTPAdminJobs<br />
# elements = "httpAdminJobs"<br />
<br />
#view HTTPUserJobs<br />
# elements = "httpUserJobs"<br />
<br />
#view HTTPTraffic<br />
# elements = "httpTrafficOut httpTrafficIn"<br />
<br />
#view HTTPRequests<br />
# elements = "httpRequestsProcessed"<br />
<br />
#view HTTPAuth<br />
# elements = "httpAuthSucceeded httpAuthFailed"<br />
<br />
#view HTTPData<br />
# elements = "httpResponseBytes httpRequestBytes"<br />
<br />
# Local Delivery<br />
#view LocalMessages<br />
# elements = "localDeliveryDeliveredMessages localDeliveryFailedMessages"<br />
<br />
#view LocalBytes<br />
# elements = "localDeliveryDeliveredBytes"<br />
<br />
#view LocalActive<br />
# elements = "localDeliveryActive"<br />
<br />
# LDAP<br />
#view Traffic<br />
# elements = "ldapTrafficOut ldapTrafficIn"<br />
<br />
#view Jobs<br />
# elements = "ldapInputJobs ldapInputTotal ldapInputActive"<br />
<br />
# Messages Traffic<br />
#view QueuedMessages<br />
# elements = "numQueuedMessages"<br />
<br />
#view SubmittedMessages<br />
# elements = "totalSubmittedMessages totalDeletedMessages totalBadMessages"<br />
# y-min = 0<br />
# y-max = 80000<br />
<br />
#view Enqueuer<br />
# elements = "numEnqueuerMessages numDequeuerBatches numDequeuerActiveProcessors"<br />
<br />
#Total Traffic<br />
#view Recipients<br />
# elements = "totalDeliveredRecipients totalRelayedRecipients totalFailedRecipients totalDelayedRecipients"<br />
<br />
#view Reports<br />
# elements = "totalErrorReports totalWarningReports totalDeliveryReports"<br />
<br />
# Web Traffic<br />
#view Sessions<br />
# elements = "webUserSessionsOpen webUserSessionsProcessed webUserSessionsTimeouted"<br />
<br />
#view Requests<br />
# elements = "webUserRequestsProcessed"<br />
<br />
#view WsspPages<br />
# elements = "wsspPagesComposed"<br />
<br />
#view WebMails<br />
# elements = "webMailRead webMailComposed"<br />
<br />
# TLS Sessions<br />
#view Sessions<br />
# elements = "numActiveTLSSessions numInactiveTLSSessions numActiveTLSConnections"<br />
<br />
#view Processed<br />
# elements = "processedTLSSessions"<br />
<br />
# AUTH TRaffic<br />
#view AUTHTraff<br />
# elements = "successfulAUTHs failedAUTHs rejectedOnFailureAUTHs"<br />
<br />
# colors<br />
color dark-green 009c00<br />
color skyblue 00aaff<br />
color bright-red ff2929<br />
color dark-red 9c0000<br />
<br />
# Default Graph values<br />
graph --default--<br />
width = 700<br />
height = 200<br />
interleaved = false<br />
vrule-color = red<br />
use-gprint = true<br />
<br />
# Hosts Active and Waiting<br />
graph smtpOutputActiveHosts<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Active Hosts"<br />
units = "hosts"<br />
legend = "Active Hosts Out"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph smtpOutputWaitingHosts<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Waiting Hosts"<br />
units = "hosts"<br />
legend = "Waiting Hosts Out"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# The Active and Total input / output SMTP connections<br />
graph smtpInputTotal<br />
color = orange<br />
draw-as = LINE1<br />
y-axis = "Connections"<br />
units = "conn"<br />
legend = "Total Input Connections"<br />
show-avg-max = TRUE<br />
<br />
graph smtpInputActive<br />
color = dark-green<br />
draw-as = LINE1<br />
y-axis = "Connections"<br />
units = "conn"<br />
legend = "Active Input Connections"<br />
show-avg-max = TRUE<br />
<br />
graph smtpOutputTotal<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Connections"<br />
units = "conn"<br />
legend = "Total Output Connections"<br />
show-avg-max = TRUE<br />
scale = "-1,*"<br />
<br />
graph smtpOutputActive<br />
color = magenta<br />
draw-as = LINE1<br />
y-axis = "Connections"<br />
units = "conn"<br />
legend = "Active Output Connections"<br />
show-avg-max = TRUE<br />
scale = "-1,*"<br />
<br />
# SMTP jobs running for input<br />
graph smtpInputJobs<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Jobs/Minute"<br />
units = "jbs/m"<br />
legend = "Jobs Input Connections"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph smtpOutputJobs<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Jobs/Minute"<br />
units = "jbs/m"<br />
legend = "Jobs Output Connections"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
scale = "-1,*"<br />
<br />
# SMTP messages sent and received<br />
graph smtpInputMessagesReceived<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Messages/Minute"<br />
units = "msgs/m"<br />
legend = "Messages Received per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph smtpOutputMessagesSent<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Messages/Minute"<br />
units = "msgs/m"<br />
legend = "Messages Sent per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
scale = "-1,*"<br />
<br />
# SMTP Message bytes, sent and received<br />
graph smtpInputMessageBytesReceived<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes Received per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
graph smtpOutputMessageBytesSent<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes Sent per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
scale = "-1,*"<br />
<br />
# POP START<br />
# POP Retrieve Messages<br />
graph popTotalRetrievedMessages<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Messages/Minute"<br />
units = "msg/m"<br />
legend = "Messages per Minute downloaded"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# POP Retrieve Bytes<br />
graph popTotalRetrievedBytes<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes per Minute downloaded"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
# popInputActive popInputTotal<br />
graph popInputTotal<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Total POP"<br />
units = "tot"<br />
legend = "Total POP Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph popInputActive<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Active POP"<br />
units = "act"<br />
legend = "Active POP Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
# POP END<br />
<br />
# IMAP START<br />
# IMAP Total & Active<br />
graph imapInputTotal<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Total Input IMAP"<br />
units = "tot"<br />
legend = "Total IMAP Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph imapInputActive<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Active Input IMAP"<br />
units = "act"<br />
legend = "Active IMAP Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
# MAPI Active<br />
graph imapMAPIActive<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Active MAPI"<br />
units = "act"<br />
legend = "Active MAPI Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
# IMAP jobs<br />
graph imapInputJobs<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "IMAP Input Jobs"<br />
units = "jbs"<br />
legend = "Active IMAP Jobs"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
# IMAP Traffic<br />
graph imapTrafficOut<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "bytes / second"<br />
units = "b/s"<br />
legend = "IMAP Traffic OUT in bytes per second"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
graph imapTrafficIn<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "bytes / second"<br />
units = "b/s"<br />
legend = "IMAP Traffic IN in bytes per second"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
scale = "-1,*"<br />
<br />
# IMAP Mailboxes<br />
graph imapTotalSelectedMailboxes<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "IMAP selected Mailboxes"<br />
units = "bytes"<br />
legend = "IMAP Selected Mailboxes in bytes"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
graph imapTotalStatusMailboxes<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "IMAP Status Mailboxes"<br />
units = "bytes"<br />
legend = "IMAP Status Mailboxes in bytes"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
<br />
# IMAP Downloaded<br />
graph imapTotalFetchedMessages<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "IMAP Fetched Messages"<br />
units = "bytes"<br />
legend = "IMAP fetched messages in bytes"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
<br />
# IMAP other folder stats<br />
graph imapTotalStoredMessages<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "IMAP Stored Messages"<br />
units = "bytes"<br />
legend = "IMAP stored messages in bytes"<br />
show-avg-max = TRUE<br />
bytes = TRUE<br />
<br />
graph imapTotalParsedMessages<br />
color = orange<br />
draw-as = LINE1<br />
y-axis = "IMAP Parsed Messages"<br />
units = "bytes"<br />
legend = "IMAP parsed messages in bytes"<br />
show-avg-max = TRUE<br />
bytes = TRUE<br />
<br />
graph imapTotalAppendedMessages<br />
color = red<br />
draw-as = LINE1<br />
y-axis = "IMAP Appended Messages"<br />
units = "bytes"<br />
legend = "IMAP appended messages in bytes"<br />
show-avg-max = TRUE<br />
bytes = TRUE<br />
<br />
graph imapTotalDeletedMessages<br />
color = yellow<br />
draw-as = LINE1<br />
y-axis = "IMAP Deleted Messages"<br />
units = "bytes"<br />
legend = "IMAP deleted messages in bytes"<br />
show-avg-max = TRUE<br />
bytes = TRUE<br />
<br />
graph imapTotalCopiedMessages<br />
color = neongrn<br />
draw-as = LINE1<br />
y-axis = "IMAP Copied Messages"<br />
units = "bytes"<br />
legend = "IMAP copied messages in bytes"<br />
show-avg-max = TRUE<br />
bytes = TRUE<br />
# IMAP END<br />
<br />
# Deliver / Queued<br />
graph numQueuedMessages<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Queued Messages"<br />
units = "msg"<br />
legend = "Number of Queued Messages"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# Rest of Message Data<br />
graph totalSubmittedMessages<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Submitted Messages"<br />
units = "msg"<br />
legend = "Number of Submitted Messages"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongren<br />
<br />
graph totalDeletedMessages<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Deleted Messages"<br />
units = "msg"<br />
legend = "Number of Deleted Messages"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph totalBadMessages<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Bad Messages"<br />
units = "msg"<br />
legend = "Number of Bad Messages"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
# En/Dequeuer<br />
graph numEnqueuerMessages<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Enqueuer Messages"<br />
units = "m"<br />
legend = "Number of Enqueuer Messages"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph numDequeuerBatches<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Dequeuer Batches"<br />
units = "btch"<br />
legend = "Number of Dequeuer Batches"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph numDequeuerActiveProcessors<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Dequeuer Active Processors"<br />
units = "actv"<br />
legend = "Number of Active Dequeuer Processors"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
# Delivered Message Data<br />
graph totalDeliveredRecipients<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Delivered Recipients"<br />
units = "dlv"<br />
legend = "Number of Delivered Recipients"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph totalRelayedRecipients<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Relayed Recipients"<br />
units = "rlyd"<br />
legend = "Number of Relayed Recipients"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph totalFailedRecipients<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Failed Recipients"<br />
units = "fld"<br />
legend = "Number of Failed Recipients"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
graph totalDelayedRecipients<br />
color = orange<br />
draw-as = LINE1<br />
y-axis = "Delayed Recipients"<br />
units = "dly"<br />
legend = "Number of Delayed Recipients"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = yellow<br />
<br />
# Reports<br />
graph totalErrorReports<br />
color = dark-red<br />
draw-as = AREA<br />
y-axis = "Error Reports"<br />
units = "err"<br />
legend = "Number of Error Reports"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
graph totalWarningReports<br />
color = orange<br />
draw-as = LINE1<br />
y-axis = "Warning Reports"<br />
units = "wrn"<br />
legend = "Number of Warning Reports"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = yellow<br />
<br />
graph totalDeliveryReports<br />
color = dark-green<br />
draw-as = LINE1<br />
y-axis = "Delivery Reports"<br />
units = "dlv"<br />
legend = "Number of Delivery Reports"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# LDAP START<br />
# Traffic<br />
graph ldapTrafficOut<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes LDAP Out Traffic per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
graph ldapTrafficIn<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes LDAP In Traffic per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
scale = "-1,*"<br />
<br />
# Jobs<br />
graph ldapInputJobs<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Jobs"<br />
units = "jbs"<br />
legend = "Number of Input Jobs"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph ldapInputTotal<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Input Total"<br />
units = "ttl"<br />
legend = "Number of Total Input"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph ldapInputActive<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Input Active"<br />
units = "act"<br />
legend = "Number of Input Active"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
# LDAP END<br />
<br />
# TLS START<br />
# TLS Sessions / Connections<br />
graph numActiveTLSSessions<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Active TLS Sessions"<br />
units = "act"<br />
legend = "Number of Active TLS Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph numInactiveTLSSessions<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Inactive TLS Sessions"<br />
units = "inact"<br />
legend = "Number of Inactive TLS Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph numActiveTLSConnections<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Active TLS Connections"<br />
units = "conn"<br />
legend = "Number of Active TLS Connections"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
# Processed TLS Sessions<br />
graph processedTLSSessions<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Processed TLS Sessions"<br />
units = "act"<br />
legend = "Number of Processed TLS Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
# TLS END<br />
<br />
# AUTH START<br />
graph successfulAUTHs<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Successful Auths"<br />
units = "auth/ok"<br />
legend = "Successful Authentications"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph failedAUTHs<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Failed Auths"<br />
units = "auth/fld"<br />
legend = "Failed Authentications"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
graph rejectedOnFailureAUTHs<br />
color = orange<br />
draw-as = LINE1<br />
y-axis = "Rejected Failed Auths"<br />
units = "rjct"<br />
legend = "Rejected on Failed Authentications"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = yellow<br />
# END START<br />
<br />
# WEB PAGES START<br />
graph webUserSessionsProcessed<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Sessions Processed"<br />
units = "prc"<br />
legend = "Web User Sessions Processed"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph webUserSessionsTimeouted<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Sessions Timeouted"<br />
units = "to"<br />
legend = "Web User Sessions Timeouted"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
graph webUserSessionsOpen<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Sessions Open"<br />
units = "open"<br />
legend = "Web User Sessions Open"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# Requests Processed<br />
graph webUserRequestsProcessed<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Requests Processed"<br />
units = "req"<br />
legend = "Number of Web User Requests Processed"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# WSSP Pages Composed<br />
graph wsspPagesComposed<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Pages Composed"<br />
units = "pgs"<br />
legend = "Number of WSSP Pages Composed"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# Web mail<br />
graph webMailRead<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Mail Read"<br />
units = "r"<br />
legend = "Mails Read in Web Interface"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph webMailComposed<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Mail Composed"<br />
units = "w"<br />
legend = "Mails Composed in Web Interface"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
# WEB PAGES END<br />
<br />
# LOCAL DELIVERY START<br />
graph localDeliveryDeliveredMessages<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Local Delivered"<br />
units = "dlv"<br />
legend = "Mails Local Delivery Agent and Delivered"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph localDeliveryFailedMessages<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Local Failed"<br />
units = "fld"<br />
legend = "Mails Local Delivery Agent and Failed"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
# Local Bytes Delivered<br />
graph localDeliveryDeliveredBytes<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Bytes"<br />
units = "b"<br />
legend = "Local Delivered Bytes"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# Active<br />
graph localDeliveryActive<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Active Local"<br />
units = "act"<br />
legend = "Active Local Delivery"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
# LOCAL DELIVERY END<br />
<br />
# HTTP DATA START<br />
# Admin<br />
graph httpTotalAdmin<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Admin Total"<br />
units = "tot"<br />
legend = "Admin Total Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph httpActiveAdmin<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Admin Active"<br />
units = "act"<br />
legend = "Admin Active Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph httpAdminJobs<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Admin Jobs"<br />
units = "jbs"<br />
legend = "Admin Total Jobs"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# User<br />
graph httpTotalUser<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "User Total"<br />
units = "tot"<br />
legend = "User Total Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph httpActiveUser<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "User Active"<br />
units = "act"<br />
legend = "User Active Sessions"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
<br />
graph httpUserJobs<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "User Jobs"<br />
units = "jbs"<br />
legend = "User Total Jobs"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# HTTP Traffic<br />
graph httpTrafficOut<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes HTTP Out Traffic per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
graph httpTrafficIn<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Bytes/Minute"<br />
units = "b/m"<br />
legend = "Bytes HTTP In Traffic per Minute"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
scale = "-1,*"<br />
<br />
# HTTP Requests<br />
graph httpRequestsProcessed<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Requests Processed"<br />
units = "req"<br />
legend = "HTTP Requests Processed"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
# Authentication<br />
graph httpAuthSucceeded<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Auth Succeeded"<br />
units = "succ"<br />
legend = "HTTP Authentication Succeeded"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
<br />
graph httpAuthFailed<br />
color = dark-red<br />
draw-as = LINE1<br />
y-axis = "Auth Failed"<br />
units = "fld"<br />
legend = "HTTP Authentication Failed"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = bright-red<br />
<br />
# Response Bytes<br />
graph httpResponseBytes<br />
color = dark-green<br />
draw-as = AREA<br />
y-axis = "Bytes"<br />
units = "b"<br />
legend = "Bytes HTTP Out Traffic"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = neongrn<br />
bytes = TRUE<br />
<br />
graph httpRequestBytes<br />
color = blue<br />
draw-as = LINE1<br />
y-axis = "Bytes"<br />
units = "b"<br />
legend = "Bytes HTTP In Traffic"<br />
show-avg-max = TRUE<br />
show-max = TRUE<br />
draw-max-as = LINE2<br />
max-color = skyblue<br />
bytes = TRUE<br />
scale = "-1,*"<br />
# HTTP DATA END<br />
</pre><br />
<br />
the ''servers'' configuration file which belongs into a subdirectory to the ''Defaults'' config file<br />
<pre><br />
Target --default--<br />
server = "192.168.5.18"<br />
community = "c0mmun1.gate"<br />
directory-desc = "Primary Mail server from TBWA & TEQUILA"<br />
<br />
Target SMTP-Data<br />
target-type = SMTPTraffic<br />
display-name = "SMTP Traffic Analyses"<br />
target-short-desc = "SMTP Messages and Bytes, sent & received"<br />
short-desc = "<b>SMTPMessages</b>: Messages Recieved and Sent per Minute<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=smtpInputMessagesReceived,smtpOutputMessagesSent;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>SMTPBytes</b>: Bytes Recieved and Sent per Minute<br><b>SMTPInput</b>: Active and Total Input/Output connections<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=smtpInputActive,smtpInputTotal,smtpOutputTotal,smtpOutputActive;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>SMTPJobs</b>: Running Input/Output Jobs per Minute<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=smtpInputMessageBytesReceived,smtpOutputMessageBytesSent;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>SMTPHosts</b>: Waiting and Active Hosts (Out)<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=smtpOutputWaitingHosts,smtpOutputActiveHosts;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\">"<br />
<br />
Target POP-Data<br />
target-type = POPTraffic<br />
display-name = "POP Traffic Analyses"<br />
target-short-desc = "POP Messages and Bytes, sent & received"<br />
short-desc = "<b>POPMessages</b>: Messages downloaded per Minute<br><b>POPBytes</b>: Bytes transfered per Minute<br><b>POPJobs</b>: Total and Active POP Sessions<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=popInputTotal,popInputActive;range=151200;rand=754;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\">"<br />
<br />
Target IMAP-Data<br />
target-type = IMAPTraffic<br />
display-name = "IMAP Traffic Analyses"<br />
target-short-desc = "IMAP Messages and Bytes, sent & received"<br />
short-desc = "<b>IMAPInput</b>: Total and Active IMAP Sessions<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=imapInputTotal,imapInputActive;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>MAPIInput</b>: Active MAPI Sessions<br><b>IMAPJobs</b>: Active IMAP Jobs<br><b>IMAPTraffic</b>: IN/OUT Traffic in bytes per Minute<br><b>IMAPMailboxes</b>: Selected Mailboxes and Sstatus Mailboxes<br><b>IMAPMessages</b>: Stores, Parsed, Appended, Fetched, Deleted and Copied Messages in Bytes<br><b>IMAPDownloaded</b>: Fetched Messages in Bytes"<br />
<br />
Target HTTP-Data<br />
target-type = HTTPTraffic<br />
display-name = "HTTP Traffic Analyses"<br />
target-short-desc = "HTTP Messages and Bytes, sent & received"<br />
short-desc = "<b>HTTPAdmin</b>: Admin Users who access<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=httpTotalAdmin,httpActiveAdmin;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>HTTPUser</b>: Normal Users Sessions<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=httpTotalUser,httpActiveUser;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>HTTPAdminJobs</b>: Server Processes for Admin Access<br><b>HTTPUserJobs</b>: Server Processes for User Jobs<br><b>HTTPTraffic</b>: Traffic per Minute<br><b>HTTPRequests</b>: Amount of Requests to the Server<br><b>HTTPAuth</b>: Amount of HTTP Authentications<br><b>HTTPData</b>: Data transfered"<br />
<br />
Target Local-Data<br />
target-type = LocalDelivery<br />
display-name = "Local Traffic Analyses"<br />
target-short-desc = "Local Messages and Bytes, sent & received"<br />
short-desc = "<b>LocalMessages</b>: Delivered and Failed<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=localDeliveryDeliveredMessages,localDeliveryFailedMessages;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>LocalBytes</b>: Bytes delivered<br><b>LocalActive</b>: Active Local"<br />
<br />
#Target RPOP-Data<br />
# target-type = RPOPTraffic<br />
# display-name = "Remote POP Traffic Analyses"<br />
# target-short-desc = "Remote POP Messages and Bytes, sent & received"<br />
<br />
Target LDAP-Data<br />
target-type = LDAPTraffic<br />
display-name = "LDAP Traffic Analyses"<br />
target-short-desc = "LDAP Messages and Bytes, sent & received"<br />
short-desc = "<b>Traffic</b>: Bytes per Minute<br><b>Jobs</b>: Input running, Total Input and Active Input"<br />
<br />
Target Messages-Data<br />
target-type = MessagesTraffic<br />
display-name = "Messages Traffic Analyses"<br />
target-short-desc = "Messages and Bytes, sent & received"<br />
short-desc = "<b>QueuedMessages</b>: Number of currently Queued Messages<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=numQueuedMessages;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>SubmittedMessages</b>: Submitted, Deleted and Bad Messages<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=totalSubmittedMessages,totalDeletedMessages,totalBadMessages;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>Enqueuer</b>: Enqueuer Messages, Dequeuer Batchs and Active Dequeue Processes<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=numEnqueuerMessages,numDequeuerBatches,numDequeuerActiveProcessors;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\">"<br />
<br />
Target Total-Data<br />
target-type = TotalTraffic<br />
display-name = "Total Traffic Analyses"<br />
target-short-desc = "Total Messages and Bytes, sent & received"<br />
short-desc = "<b>Recipients</b>: Delivered, Relayed, Failed and Delayed Recipients<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=totalDeliveredRecipients,totalRelayedRecipients,totalFailedRecipients,totalDelayedRecipients;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>Reports</b>: Error, Warning and Deliverey Reports<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=totalErrorReports,totalWarningReports,totalDeliveryReports;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\">"<br />
<br />
Target Web-Data<br />
target-type = WebUserTraffic<br />
display-name = "Web User Traffic Analyses"<br />
target-short-desc = "Web USer Messages and Bytes, sent & received"<br />
short-desc = "<b>Session:</b>: Web User Sessions Processed, Timedouted and Open<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=webUserSessionsOpen,webUserSessionsProcessed,webUserSessionsTimeouted;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>Requests</b>: User Requests<br><b>WsspPages</b>: WSSP Pages composed (created)<br><b>WebMails</b>: Read and Composed mails in web interface"<br />
<br />
Target TLS-Data<br />
target-type = TLSTraffic<br />
display-name = "TLS Traffic Analyses"<br />
target-short-desc = "TLS Messages and Bytes, sent & received"<br />
short-desc = "<b>Sessions</b>: Active, Inactive TLS Sessions and Active TLS Connections<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=numActiveTLSSessions,numInactiveTLSSessions,numActiveTLSConnections;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\"><br><b>Processed</b>: Number of Processes TLS Sessions"<br />
<br />
Target AUTH-Data<br />
target-type = AUTHTraffic<br />
display-name = "AUTH Traffic Analyses"<br />
target-short-desc = "AUTH Messages and Bytes, sent & received"<br />
short-desc = "<b>AuthTraff</b>: Successful, Failed and Rejected on Failed Authentications<br><img src=\"mini-graph.cgi?type=png;target=%auto-target-path%/%auto-target-name%;dslist=successfulAUTHs,failedAUTHs,rejectedOnFailureAUTHs;range=151200;rand=44;width=300;height=100;use-gprint=0;show-max=0;no-legend=yes\">"<br />
</pre></div>Gullevekhttps://amd.co.at/adminwiki/CricketCricket2006-05-26T01:37:36Z<p>Gullevek: Cricket RRD Monitoring</p>
<hr />
<div>= Cricket Monitoring =<br />
<br />
== Overview ==<br />
<br />
Cricket is similar to mrtg. The advantage of cricket is the possible to inherit configuration data in the config tree and therefore create a big tree in very short time. You could config the default layout for a server and then just create all the server entries with their connection data.<br />
<br />
Cricket works with snmp and therefore a basic knowledge is needed to get it running.<br />
<br />
== Configurations ==<br />
<br />
=== Communigate Pro Config ===<br />
<br />
I wrote a configuration file for cricket, so it can read out all the snmp values from CommuniGate Pro. The configuration file consists out of two files. The main ''Default'' configuration and the ''servers'' configuration.<br />
<br />
The best way is to create this folder structure below the ''circket/config/'' directory<br />
mail/cgpro/<server.domain.com><br />
<br />
put the ''Default'' file into the ''mail/cgpro'' and the ''servers'' file into the ''<server.domain.com>'' directory.<br />
<br />
In the ''servers'' configuration file you need to change the ''Target --default--'' part only<br />
<br />
<pre><br />
Target --default--<br />
server = "<ip>"<br />
community = "<snmp community string>"<br />
directory-desc = "<a directory description>"<br />
</pre><br />
<br />
The rest can be kept as is, unless you want to remove or add graphs to the overview page.<br />
<br />
[[Cricket/config_cgpro|Configuration files for CommuniGatePro]]<br />
<br />
== Patches ==<br />
<br />
=== grapher.cgi patch for more control ===<br />
<br />
I created various changes to the grapher file to have more functionality and control. Some of those are<br />
* define size of the rrdpgrah<br />
* turn on and off the legend<br />
* control "max" bar depending on time<br />
* range control<br />
* add graphs via config file to the overview page<br />
* add data legend<br />
* other changes<br />
<br />
Before applying the patch, you should make a backup of course.<br />
<br />
The new Parameters you can pass to the mini_grapher.cgi are:<br />
* ''range'': timestamp range to show<br />
* ''width''/''height'': width and height of graph<br />
* ''use-gprint'': if set to 1 it show the min/max/curr legend<br />
* ''show-max'': set to 0, to hide the max graph line, even if defined in config file<br />
* ''no-legend'': yes/no, hide the complete legend below<br />
<br />
[[Cricket/grapher_patch|Patch for grapher.cgi]]</div>Gullevekhttps://amd.co.at/adminwiki/HotSaNIC/multiple_postfix_moduleHotSaNIC/multiple postfix module2006-05-26T01:21:29Z<p>Gullevek: </p>
<hr />
<div>= Patches for the multiple postifx module =<br />
<br />
diagrams.pl<br />
<pre><br />
--- /usr/local/src/HotSaNIC/modules/mailq/diagrams.pl 2004-05-24 08:53:39.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/mailq/diagrams.pl 2006-03-23 16:38:01.689559750 +0900<br />
@@ -31,115 +31,134 @@<br />
my ($FORCE,$DEBUGLEVEL,%PLOT)=HotSaNICdiagram::check_args(@ARGV);<br />
my @OPTIONS=HotSaNICdiagram::get_common_options(%MODULECONFIG,%CONFIG);<br />
<br />
-# generate diagrams<br />
-#<br />
-my $DB_FILE="./rrd/queue.rrd";<br />
<br />
-# if database exists, create images...<br />
-if ( -e $DB_FILE) {<br />
<br />
- # handle module-specific settings<br />
- #<br />
- my $LEGEND="bytes";<br />
- my $name=$LEGEND;<br />
- my $title="bytes in Queue";<br />
+# read out each QUEUE file entry<br />
+#<br />
+foreach my $entry (@{$MODULECONFIG{QUEUE}}) {<br />
<br />
- # common options<br />
- #<br />
- push @OPTIONS,(<br />
- "-v", $LEGEND, # Y-legend<br />
- "--alt-autoscale-max"); # alternate scaling<br />
+ my (undef,undef,$item,$DB_FILE,$name,$file,$description)=HotSaNICmod::common::get_names($entry,"");<br />
<br />
- # graph "bytes in queue"<br />
+ # generate diagrams<br />
#<br />
- print "creating images for bytes in queue ...\n";<br />
-<br />
- foreach my $range ("1h","6h","1day","1week","1month","1year") {<br />
- my ($descr,$file,$build,$fullrange,$DATESTRING)=HotSaNICdiagram::get_diagram_properties($range);<br />
+ $DB_FILE="./rrd/$DB_FILE.rrd";<br />
<br />
- my @EXTOPTIONS=("-s","-$fullrange", "--title", "$title - last $descr ($DATESTRING)");<br />
- my @COMMANDS=();<br />
+ # if database exists, create images...<br />
+ if ( -e $DB_FILE) {<br />
<br />
- if ($range eq "1h") {<br />
- @COMMANDS=("DEF:avg1=$DB_FILE:kbytes:AVERAGE",<br />
- "CDEF:avg=avg1,1024,*",<br />
- "AREA:avg#".$MODULECONFIG{COLOR_AREA}.":",<br />
- HotSaNICdiagram::insert_data("LINE1","avg",$MODULECONFIG{COLOR_LINE},"avg","min avg max cur",$LEGEND,1),<br />
- HotSaNICdiagram::insert_lines(%MODULECONFIG));<br />
- }<br />
- else {<br />
- @COMMANDS=("DEF:avg1=$DB_FILE:kbytes:AVERAGE",<br />
- "DEF:max1=$DB_FILE:kbytes:MAX",<br />
- "DEF:min1=$DB_FILE:kbytes:MIN",<br />
- "CDEF:min=min1,1024,*",<br />
- "CDEF:avg=avg1,1024,*",<br />
- "CDEF:max=max1,1024,*",<br />
- HotSaNICdiagram::insert_minmax("min max",$MODULECONFIG{COLOR_MINMAX},$MODULECONFIG{COLOR_BORDER},"min/max",$LEGEND,1),<br />
- HotSaNICdiagram::insert_data("LINE2","avg",$MODULECONFIG{COLOR_LINE},"avg ","min avg max",$LEGEND,1),<br />
- HotSaNICdiagram::insert_lines(%MODULECONFIG));<br />
- }<br />
+<br />
+ # handle module-specific settings<br />
+ #<br />
+ my $LEGEND="bytes";<br />
+ my $name=$LEGEND;<br />
+ my $title="bytes in Queue";<br />
+<br />
+ # common options<br />
+ #<br />
+ push @OPTIONS,(<br />
+ "-v", $LEGEND, # Y-legend<br />
+ "--alt-autoscale-max"); # alternate scaling<br />
+<br />
+ # graph "bytes in queue"<br />
+ #<br />
+ print "creating images for bytes in queue ...\n";<br />
+<br />
+ foreach my $range ("1h","6h","1day","1week","1month","1year") {<br />
+ my ($descr,$time,$build,$fullrange,$DATESTRING)=HotSaNICdiagram::get_diagram_properties($range);<br />
+<br />
+ my @EXTOPTIONS=("-s","-$fullrange", "--title", "$title - last $descr ($DATESTRING)");<br />
+ my @COMMANDS=();<br />
+<br />
+ if ($range eq "1h") {<br />
+ @COMMANDS=("DEF:avg1=$DB_FILE:kbytes:AVERAGE",<br />
+ "CDEF:avg=avg1,1024,*",<br />
+ "AREA:avg#".$MODULECONFIG{COLOR_AREA}.":",<br />
+ HotSaNICdiagram::insert_data("LINE1","avg",$MODULECONFIG{COLOR_LINE},"avg","min avg max cur",$LEGEND,1),<br />
+ HotSaNICdiagram::insert_lines(%MODULECONFIG));<br />
+ }<br />
+ else {<br />
+ @COMMANDS=("DEF:avg1=$DB_FILE:kbytes:AVERAGE",<br />
+ "DEF:max1=$DB_FILE:kbytes:MAX",<br />
+ "DEF:min1=$DB_FILE:kbytes:MIN",<br />
+ "CDEF:min=min1,1024,*",<br />
+ "CDEF:avg=avg1,1024,*",<br />
+ "CDEF:max=max1,1024,*",<br />
+ HotSaNICdiagram::insert_minmax("min max",$MODULECONFIG{COLOR_MINMAX},$MODULECONFIG{COLOR_BORDER},"min/max",$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("LINE2","avg",$MODULECONFIG{COLOR_LINE},"avg ","min avg max",$LEGEND,1),<br />
+ HotSaNICdiagram::insert_lines(%MODULECONFIG));<br />
+ }<br />
+<br />
+ my %CONF=(RANGE=>$descr,FILENAME=>"$OUTDIR/$file-$name-$time",FORMAT=>$IMGFMT,INTERVAL=>$build,FORCE=>$FORCE,OPTIONS=>[@OPTIONS,@EXTOPTIONS,@COMMANDS],DEBUGLEVEL=>$DEBUGLEVEL,MODNAME=>$MODNAME);<br />
+ HotSaNICdiagram::graph(%CONF);<br />
+ }<br />
+ print "\n";<br />
+<br />
+ @OPTIONS=HotSaNICdiagram::get_common_options(%MODULECONFIG,%CONFIG);<br />
+<br />
+ $LEGEND="requests";<br />
+ $name="req";<br />
+ $title="requests in queue";<br />
+<br />
+ # common options<br />
+ #<br />
+ push @OPTIONS,(<br />
+ "-v",$LEGEND, # Y-legend<br />
+ "--alt-autoscale-max"); # alternate scaling<br />
+<br />
+ # graph "items in queue"<br />
+ print "creating images for requests ...\n";<br />
+<br />
+ foreach my $range ("1h","6h","1day","1week","1month","1year") {<br />
+ my ($descr,$time,$build,$fullrange,$DATESTRING)=HotSaNICdiagram::get_diagram_properties($range);<br />
+<br />
+ my $legends="min avg max";<br />
+ if ($range eq "1h") { $legends="min avg max cur"; }<br />
+<br />
+ my @EXTOPTIONS=("-s","-$fullrange", "--title", "$title - last $descr ($DATESTRING)");<br />
+ my @COMMANDS=(<br />
+ "DEF:req=$DB_FILE:req:AVERAGE",<br />
+ "DEF:crefused=$DB_FILE:crefused:AVERAGE",<br />
+ "DEF:msrefused=$DB_FILE:msrefused:AVERAGE",<br />
+ "DEF:ctimeout=$DB_FILE:ctimeout:AVERAGE",<br />
+ "DEF:rtimeout=$DB_FILE:rtimeout:AVERAGE",<br />
+ "DEF:nohost=$DB_FILE:nohost:AVERAGE",<br />
+ "DEF:noroute=$DB_FILE:noroute:AVERAGE",<br />
+ "DEF:err450=$DB_FILE:err450:AVERAGE",<br />
+ "DEF:err421=$DB_FILE:err421:AVERAGE",<br />
+ "DEF:err4=$DB_FILE:err4:AVERAGE",<br />
+ "DEF:other=$DB_FILE:other:AVERAGE",<br />
+ "CDEF:active=req,crefused,-,msrefused,-,ctimeout,-,rtimeout,-,nohost,-,noroute,-,err450,-,err421,-,err4,-,other,-,");<br />
+<br />
+ if ($range ne "1h") {<br />
+ push @COMMANDS,("DEF:maxreq=$DB_FILE:req:MAX",<br />
+ HotSaNICdiagram::insert_data("AREA","maxreq",$MODULECONFIG{COLOR_MINMAX},"abs. maximum ",$legends,$LEGEND,1),<br />
+ "LINE1:maxreq#".$MODULECONFIG{COLOR_LINE}.":");<br />
+ }<br />
+ # draw "unseen" line for "total" with "other"-value to have it on top of the legend<br />
+ push @COMMANDS,(<br />
+ HotSaNICdiagram::insert_data("LINE1","other req",$MODULECONFIG{COLOR_LINE} ,"total ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("AREA" ,"msrefused",$MODULECONFIG{COLOR_AREA_MSREFUSED},"mail service refused",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","crefused" ,$MODULECONFIG{COLOR_AREA_CREFUSED} ,"connection refused ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","other" ,$MODULECONFIG{COLOR_AREA_OTHER} ,"other ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","nohost" ,$MODULECONFIG{COLOR_AREA_NOHOST} ,"host not found ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","noroute" ,$MODULECONFIG{COLOR_AREA_NOROUTE} ,"route not found ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","ctimeout" ,$MODULECONFIG{COLOR_AREA_CTIMEOUT} ,"connection timed out",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","err450" ,$MODULECONFIG{COLOR_AREA_ERR450} ,"450 mbox not okay ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","err421" ,$MODULECONFIG{COLOR_AREA_ERR421} ,"421 service not okay",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","err4" ,$MODULECONFIG{COLOR_AREA_ERR4} ,"general 4xx error ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","rtimeout" ,$MODULECONFIG{COLOR_AREA_RTIMEOUT} ,"read timed out ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","active" ,$MODULECONFIG{COLOR_AREA} ,"active ",$legends,$LEGEND,1),<br />
+ "LINE1:req#".$MODULECONFIG{COLOR_LINE}.":",<br />
+ HotSaNICdiagram::insert_lines(%MODULECONFIG));<br />
<br />
- my %CONF=(RANGE=>$descr,FILENAME=>"$OUTDIR/$name-$file",FORMAT=>$IMGFMT,INTERVAL=>$build,FORCE=>$FORCE,OPTIONS=>[@OPTIONS,@EXTOPTIONS,@COMMANDS],DEBUGLEVEL=>$DEBUGLEVEL,MODNAME=>$MODNAME);<br />
- HotSaNICdiagram::graph(%CONF);<br />
- }<br />
- print "\n";<br />
-<br />
- @OPTIONS=HotSaNICdiagram::get_common_options(%MODULECONFIG,%CONFIG);<br />
-<br />
- $LEGEND="requests";<br />
- $name="req";<br />
- $title="requests in queue";<br />
-<br />
- # common options<br />
- #<br />
- push @OPTIONS,(<br />
- "-v",$LEGEND, # Y-legend<br />
- "--alt-autoscale-max"); # alternate scaling<br />
-<br />
-# graph "items in queue"<br />
- print "creating images for requests ...\n";<br />
-<br />
- foreach my $range ("1h","6h","1day","1week","1month","1year") {<br />
- my ($descr,$file,$build,$fullrange,$DATESTRING)=HotSaNICdiagram::get_diagram_properties($range);<br />
-<br />
- my $legends="min avg max";<br />
- if ($range eq "1h") { $legends="min avg max cur"; }<br />
-<br />
- my @EXTOPTIONS=("-s","-$fullrange", "--title", "$title - last $descr ($DATESTRING)");<br />
- my @COMMANDS=(<br />
- "DEF:req=$DB_FILE:req:AVERAGE",<br />
- "DEF:crefused=$DB_FILE:crefused:AVERAGE",<br />
- "DEF:msrefused=$DB_FILE:msrefused:AVERAGE",<br />
- "DEF:ctimeout=$DB_FILE:ctimeout:AVERAGE",<br />
- "DEF:rtimeout=$DB_FILE:rtimeout:AVERAGE",<br />
- "DEF:nohost=$DB_FILE:nohost:AVERAGE",<br />
- "DEF:other=$DB_FILE:other:AVERAGE",<br />
- "CDEF:active=req,crefused,-,msrefused,-,ctimeout,-,rtimeout,-,nohost,-,other,-,");<br />
-<br />
- if ($range ne "1h") {<br />
- push @COMMANDS,("DEF:maxreq=$DB_FILE:req:MAX",<br />
- HotSaNICdiagram::insert_data("AREA","maxreq",$MODULECONFIG{COLOR_MINMAX},"abs. maximum ",$legends,$LEGEND,1),<br />
- "LINE1:maxreq#".$MODULECONFIG{COLOR_LINE}.":");<br />
- }<br />
- # draw "unseen" line for "total" with "other"-value to have it on top of the legend<br />
- push @COMMANDS,(<br />
- HotSaNICdiagram::insert_data("LINE1","other req",$MODULECONFIG{COLOR_LINE} ,"total ",$legends,$LEGEND,1),<br />
- HotSaNICdiagram::insert_data("AREA" ,"msrefused",$MODULECONFIG{COLOR_AREA_MSREFUSED},"mail service refused",$legends,$LEGEND,1),<br />
- HotSaNICdiagram::insert_data("STACK","crefused" ,$MODULECONFIG{COLOR_AREA_CREFUSED} ,"connection refused ",$legends,$LEGEND,1),<br />
- HotSaNICdiagram::insert_data("STACK","other" ,$MODULECONFIG{COLOR_AREA_OTHER} ,"other ",$legends,$LEGEND,1),<br />
- HotSaNICdiagram::insert_data("STACK","nohost" ,$MODULECONFIG{COLOR_AREA_NOHOST} ,"host not found ",$legends,$LEGEND,1),<br />
- HotSaNICdiagram::insert_data("STACK","ctimeout" ,$MODULECONFIG{COLOR_AREA_CTIMEOUT} ,"connection timed out",$legends,$LEGEND,1),<br />
- HotSaNICdiagram::insert_data("STACK","rtimeout" ,$MODULECONFIG{COLOR_AREA_RTIMEOUT} ,"read timed out ",$legends,$LEGEND,1),<br />
- HotSaNICdiagram::insert_data("STACK","active" ,$MODULECONFIG{COLOR_AREA} ,"active ",$legends,$LEGEND,1),<br />
- "LINE1:req#".$MODULECONFIG{COLOR_LINE}.":",<br />
- HotSaNICdiagram::insert_lines(%MODULECONFIG));<br />
+ my %CONF=(RANGE=>$descr,FILENAME=>"$OUTDIR/$file-$name-$time",FORMAT=>$IMGFMT,INTERVAL=>$build,FORCE=>$FORCE,OPTIONS=>[@OPTIONS,@EXTOPTIONS,@COMMANDS],DEBUGLEVEL=>$DEBUGLEVEL,MODNAME=>$MODNAME);<br />
+ HotSaNICdiagram::graph(%CONF);<br />
<br />
- my %CONF=(RANGE=>$descr,FILENAME=>"$OUTDIR/$name-$file",FORMAT=>$IMGFMT,INTERVAL=>$build,FORCE=>$FORCE,OPTIONS=>[@OPTIONS,@EXTOPTIONS,@COMMANDS],DEBUGLEVEL=>$DEBUGLEVEL,MODNAME=>$MODNAME);<br />
- HotSaNICdiagram::graph(%CONF);<br />
+ }<br />
<br />
}<br />
+ else { print " No database \"$DB_FILE\" found\n Please check if the daemon is running.\n"; }<br />
}<br />
-else { print " No database \"$DB_FILE\" found\n Please check if the daemon is running.\n"; }<br />
print "\n";<br />
<br />
exit 0;<br />
</pre><br />
<br />
makeindex.pl<br />
<pre><br />
--- /usr/local/src/HotSaNIC/modules/mailq/makeindex.pl 2004-05-29 18:43:00.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/mailq/makeindex.pl 2006-03-23 16:25:34.642872250 +0900<br />
@@ -8,10 +8,10 @@<br />
<br />
# include HotSaNIC libraries<br />
use lib "../../lib";<br />
-<br />
+use lib "./platform";<br />
use HotSaNICparser;<br />
use HotSaNIChtml;<br />
-<br />
+use common;<br />
<br />
(my $VERSION = '$Revision: 1.13 $') =~ s/.*(\d+\.\d+).*/$1/;<br />
(my $IDENTIFIER = '$Id: makeindex.pl,v 1.13 2004/05/29 09:43:00 bernisys Exp $') =~ s/.*,v (.*) \$/$1/;<br />
@@ -26,7 +26,7 @@<br />
$REFRESH=$CONFIG{REFRESH};<br />
$REFRESH=0 if !defined $REFRESH;<br />
<br />
-<br />
+%MODCONFIG=HotSaNICmod::common::configure();<br />
@DIAGRAMS=("hour","6h","day","week","month","year");<br />
@TIMES=("6h","week");<br />
<br />
@@ -38,10 +38,10 @@<br />
print FILE HotSaNIChtml::create_header($MODNAME,$REFRESH,"$time overview page")."<table>\n";<br />
<br />
foreach $proc (keys %DESCR) {<br />
- $descr=$DESCR{$proc};<br />
- ($name = $proc) =~ s/_/:/;<br />
- ($page=$proc) =~ s/[.:]/_/g;<br />
- print FILE HotSaNIChtml::create_table_entry($IMAGEFORMAT,$page,$time,$name,$descr,1);<br />
+ foreach $entry (@{$MODCONFIG{QUEUE}}) {<br />
+ my (undef,undef,undef,$dbname,$name,$file,$description)=HotSaNICmod::common::get_names($entry,$proc);<br />
+ print FILE HotSaNIChtml::create_table_entry($IMAGEFORMAT,$file."-".$proc,$time,$name,$description,1);<br />
+ }<br />
}<br />
print FILE "</table>\n".HotSaNIChtml::create_footer($MODNAME);<br />
close FILE;<br />
@@ -49,16 +49,17 @@<br />
<br />
# build device-based .html files and complete index<br />
#<br />
+my $maxcols = scalar@{$MODCONFIG{QUEUE}};<br />
open (IDXFILE,">$VARDIR/idxdata");<br />
-print IDXFILE HotSaNIChtml::create_overview_table_header($MODNAME,join(" ",@TIMES),1);<br />
+print IDXFILE HotSaNIChtml::create_overview_table_header($MODNAME,join(" ",@TIMES),$maxcols);<br />
$num=0;<br />
foreach $proc (sort keys %DESCR) {<br />
$num++;<br />
- $description=$DESCR{$proc};<br />
- ($file=$proc) =~ s/[.:]/_/g;<br />
- ($name = $proc) =~ s/_/:/;<br />
- print IDXFILE HotSaNIChtml::create_overview_table_entry($MODNAME,$IMAGEFORMAT,$num,$file,$name,$description);<br />
- HotSaNIChtml::make_device_page($MODNAME,$WEBDIR,$IMAGEFORMAT,$file,$description,@DIAGRAMS);<br />
+ foreach $entry (@{$MODCONFIG{QUEUE}}) {<br />
+ my (undef,undef,undef,$dbname,$name,$file,$description)=HotSaNICmod::common::get_names($entry,$proc);<br />
+ print IDXFILE HotSaNIChtml::create_overview_table_entry($MODNAME,$IMAGEFORMAT,$num,$file."-".$proc,$name,$description);<br />
+ HotSaNIChtml::make_device_page($MODNAME,$WEBDIR,$IMAGEFORMAT,$file."-".$proc,$description,@DIAGRAMS);<br />
+ }<br />
}<br />
<br />
close IDXFILE;<br />
</pre><br />
<br />
makerrd<br />
<pre><br />
--- /usr/local/src/HotSaNIC/modules/mailq/makerrd 2004-04-19 01:35:24.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/mailq/makerrd 2006-03-23 16:34:00.242470250 +0900<br />
@@ -2,14 +2,18 @@<br />
<br />
. ../../settings<br />
<br />
+PROC=$1<br />
+<br />
SECS=`date +%s`<br />
<br />
MODNAME=`pwd|sed -e "s/.*\///g" | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ`<br />
<br />
- echo $SECS $MODNAME: setting up database<br />
+if [ "$PROC" = "" ] ; then echo "arguments missing!" ; else<br />
+<br />
+ echo $SECS $MODNAME: setting up database for $PROC<br />
<br />
<br />
- $BINPATH/rrdtool create rrd/queue.rrd --step 10 \<br />
+ $BINPATH/rrdtool create rrd/$PROC.rrd --step 10 \<br />
DS:kbytes:GAUGE:300:0:U \<br />
DS:req:GAUGE:300:0:U \<br />
DS:crefused:GAUGE:300:0:U \<br />
@@ -18,6 +22,10 @@<br />
DS:nohost:GAUGE:300:0:U \<br />
DS:other:GAUGE:300:0:U \<br />
DS:msrefused:GAUGE:300:0:U \<br />
+ DS:noroute:GAUGE:300:0:U \<br />
+ DS:err450:GAUGE:300:0:U \<br />
+ DS:err421:GAUGE:300:0:U \<br />
+ DS:err4:GAUGE:300:0:U \<br />
RRA:AVERAGE:0:1:720 \<br />
RRA:AVERAGE:0.3:6:2880 \<br />
RRA:AVERAGE:0.3:60:2016 \<br />
@@ -32,6 +40,8 @@<br />
RRA:MAX:0.3:360:1488 \<br />
RRA:MAX:0.3:4320:1460<br />
<br />
+fi;<br />
+<br />
# 2h -> 720 Werte alle 10sec<br />
# 2d = 48h -> 2880 Werte alle 1min (6*10sec)<br />
# 2w = 14d -> 2016 Werte alle 10min (60*10sec)<br />
</pre><br />
<br />
setup.pl<br />
<pre><br />
--- /usr/local/src/HotSaNIC/modules/mailq/setup.pl 2004-07-12 16:50:14.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/mailq/setup.pl 2006-03-22 17:49:56.041398000 +0900<br />
@@ -11,7 +11,7 @@<br />
use lib "../../lib";<br />
use lib "./platform";<br />
use HotSaNICparser;<br />
-<br />
+use HotSaNICshellio;<br />
use HotSaNIClog;<br />
use common;<br />
<br />
@@ -21,18 +21,36 @@<br />
(my $IDENTIFIER = '$Id: setup.pl,v 1.6 2004/07/12 07:50:14 bernisys Exp $') =~ s/.*,v (.*) \$/$1/;<br />
<br />
my $MODNAME=HotSaNICparser::get_module_name();<br />
-<br />
+my %MODCONF=HotSaNICmod::common::configure();<br />
my $OUTFILE="settings.new";<br />
if ( ! -e "settings" ) { $OUTFILE="settings"; }<br />
open OUTFILE,">$OUTFILE" || die "could not open ".HotSaNICparser::get_module_name()." settings file for writing.\n";<br />
<br />
+if (! @{$MODCONF{QUEUE}}) { @{$MODCONF{QUEUE}}="" }<br />
+if (@{$MODCONF{QUEUE}}) { $MODCONF{QUEUE}="QUEUE=\"".join("\"\nQUEUE=\"",@{$MODCONF{QUEUE}})."\""; }<br />
+else { $MODCONF{QUEUE}=""; }<br />
+<br />
+<br />
print OUTFILE "# SHORT DESCRIPTION<br />
#<br />
-# This module doesn't need any configuration right now.<br />
+# configure queues<br />
#<br />
+# QUEUE=\"<name>,<description>\"<br />
+#<br />
+# name is the path to the main.cf file, eg /usr/local/postfix/etc/postifx/<br />
+# if there is no entry, the default path is taken.<br />
+# if you have several running, and one is the default, you have to add<br />
+# the default too<br />
+#<br />
+$MODCONF{QUEUE}<br />
";<br />
<br />
close OUTFILE;<br />
<br />
-print "This module doesn't need any configuration right now.\n";<br />
+if ($OUTFILE eq "settings.new") {<br />
+ HotSaNICparser::backup_file("settings");<br />
+ rename "settings.new","settings";<br />
+ }<br />
+<br />
+print "Please check the settings file and adapt it to satisfy your needs.\n";<br />
<br />
</pre><br />
<br />
in the platform folder<br />
common.pm<br />
<pre><br />
--- /usr/local/src/HotSaNIC/modules/mailq/platform/common.pm 2004-05-24 08:53:39.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/mailq/platform/common.pm 2006-03-23 16:29:05.364041500 +0900<br />
@@ -6,7 +6,40 @@<br />
}<br />
<br />
sub configure {<br />
- return HotSaNICparser::get_moduleconfig(".");<br />
+ %MODULECONFIG=HotSaNICparser::get_moduleconfig(".",(QUEUE=>"array"));<br />
+ if (!@{$MODULECONFIG{QUEUE}}) { @{$MODULECONFIG{QUEUE}}=(""); }<br />
+# if (! @list) { @list=HotSaNICparser::locate_files("bin/xntpdc"); }<br />
+<br />
+ return %MODULECONFIG;<br />
}<br />
<br />
+sub get_names {<br />
+ my $entry=shift || ",";<br />
+ my $item=shift || "";<br />
+ my $community="";<br />
+<br />
+ my %DESCR=(""=>"","bytes"=>"Bytes in ","req"=>"Requests in ");<br />
+<br />
+ my ($queue,$description)=split /,/,$entry;<br />
+ if ($queue eq "") {<br />
+ $dbname="queue";<br />
+ @list=HotSaNICparser::locate_files("/etc/postfix/main.cf");<br />
+ if ( @list < 1 )<br />
+ {<br />
+ @list=HostSaNICparser::locate_files("main.cf");<br />
+ }<br />
+ # always use first found<br />
+ $queue = $list[0];<br />
+ $file=$item;<br />
+ $name=$item;<br />
+ $description=$DESCR{$item};<br />
+ }<br />
+ else {<br />
+ ($dbname=$queue) =~ s/[:\/]/_/g;<br />
+ ($file=$queue) =~ s/[.:\/]/_/g;<br />
+ $name=$queue;<br />
+ $description=$DESCR{$item}."Postifx Queue $queue";<br />
+ }<br />
+ return ($queue,$community,$item,$dbname,$name,$file,$description);<br />
+ }<br />
1;<br />
</pre><br />
<br />
default.pl<br />
<pre><br />
--- /usr/local/src/HotSaNIC/modules/mailq/platform/default.pm 2004-07-01 19:28:50.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/mailq/platform/default.pm 2006-03-23 16:34:55.249908000 +0900<br />
@@ -11,34 +11,49 @@<br />
sub sample {<br />
my %args=@_;<br />
<br />
- $kbytes=0;<br />
- $crefused=0;<br />
- $ctimeout=0;<br />
- $rtimeout=0;<br />
- $nohost=0;<br />
- $other=0;<br />
- $msrefused=0;<br />
- $active=0;<br />
-<br />
- open FILE,"mailq|";<br />
- while (<FILE>) {<br />
- if (/^\w{10,}\*\s/o) { $active++; }<br />
- elsif (/^\s*\(/o) {<br />
- if (index($_,"Connection refused") >=0 ) { $crefused++; }<br />
- elsif (index($_,"Connection timed out") >=0 ) { $ctimeout++; }<br />
- elsif (index($_,"Host not found") >=0 ) { $nohost++; }<br />
- elsif (index($_,"read timeout") >=0 ) { $rtimeout++; }<br />
- elsif (index($_,"server refused mail service") >=0 ) { $msrefused++; }<br />
- else { $other++; }<br />
+ foreach $entry (@{$args{QUEUE}}) {<br />
+ my ($queue,undef,undef,$dbname,undef,undef,undef)=HotSaNICmod::common::get_names($entry,"");<br />
+<br />
+ $kbytes=0;<br />
+ $crefused=0;<br />
+ $ctimeout=0;<br />
+ $rtimeout=0;<br />
+ $nohost=0;<br />
+ $other=0;<br />
+ $msrefused=0;<br />
+ $active=0;<br />
+ $noroute=0;<br />
+ $err450=0;<br />
+ $err421=0;<br />
+ $err4=0;<br />
+<br />
+ my $command="mailq -C $queue";<br />
+<br />
+ open FILE,"$command|";<br />
+ while (<FILE>) {<br />
+ if (/^\w{10,}\*\s/o) { $active++; }<br />
+ elsif (/^\s*\(/o) {<br />
+ if (index($_,"Connection refused") >=0 ) { $crefused++; }<br />
+ elsif (index($_,"Connection timed out") >=0 ) { $ctimeout++; }<br />
+ elsif (index($_,"Host not found") >=0 ) { $nohost++; }<br />
+ elsif (index($_,"read timeout") >=0 ) { $rtimeout++; }<br />
+ elsif (index($_,"server refused mail service") >=0 ) { $msrefused++; }<br />
+ elsif (index($_,"No route to host") >=0 ) { $noroute++; }<br />
+ elsif (index($_,"said: 450") >=0 ) { $err450++; }<br />
+ elsif (index($_,"said: 421") >=0 ) { $err421++; }<br />
+ elsif (index($_,"said: 4") >=0 ) { $err4++; } # all other 4xx errors are collected here<br />
+ else { $other++; }<br />
+ }<br />
+ elsif (/^--/o) { (undef,$kbytes)=split; }<br />
}<br />
- elsif (/^--/o) { (undef,$kbytes)=split; }<br />
- }<br />
- close FILE;<br />
+ close FILE;<br />
<br />
- my $req=$crefused+$ctimeout+$rtimeout+$nohost+$other+$msrefused+$active;<br />
+ my $req=$crefused+$ctimeout+$rtimeout+$nohost+$other+$msrefused+$active+$noroute+$err450+$err421+$err4;<br />
+print "DB: $dbname, running: $command\n";<br />
<br />
- HotSaNICmod::do_rrd("queue","U",time,$kbytes,$req,$crefused,$ctimeout,$rtimeout,$nohost,$other,$msrefused);<br />
+ HotSaNICmod::do_rrd($dbname,"U",time,$kbytes,$req,$crefused,$ctimeout,$rtimeout,$nohost,$other,$msrefused,$noroute,$err450,$err421,$err4);<br />
<br />
+ }<br />
}<br />
<br />
1;<br />
</pre></div>Gullevekhttps://amd.co.at/adminwiki/HotSaNICHotSaNIC2006-05-26T01:21:13Z<p>Gullevek: /* Postfix Module patch to have it check 'n' postfix servers on one box */</p>
<hr />
<div>= HotSaNIC monitoring =<br />
<br />
== Overview ==<br />
<br />
HotSaNIC is system that reads data through a perl daemon and uses rrd to store and create graphs for the system. It is very similar to [[munin]], but it lacks of a client-server system. As [[munin]] it can have plugins, but they are more difficult to write.<br />
<br />
The advantage from HotSaNIC is the very high resolution, it reads the data every view seconds and gets therefore very accurate results. This is good for monitoring network traffic, processes and similar quick changing events.<br />
<br />
The disadvantage is, that it creates the graphs on the server itself and cannot offload this task to a remote system. It therefore has to use some CPU time for it. This can be limited to create the graphs only every view hours, or depending on how often you want to check your graphs. In my opinion it would be better to have a cgi script like [[cricket]] has to create the graphs only when needed, when the page is viewed.<br />
<br />
The current CVS version is recommended as it has all patches to work with current kernels. Hotsanic daemon runs as root and therefore has no problems with grs or other secure kernels.<br />
<br />
== Additional Modules / Changed Modules ==<br />
<br />
=== NTP Patch to work with current ntp daemon ===<br />
<br />
The ntp module from HotSaNIC works, but misses some data because of some output change from the ntpdaemon. I wrote a small patch to fix this.<br />
<br />
Patches below<br />
<br />
diagrams.pl<br />
<pre><br />
--- /usr/local/src/sys/HotSaNIC/modules/ntp/diagrams.pl 2004-06-03 08:25:10.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/ntp/diagrams.pl 2006-03-20 10:13:06.447836886 +0900<br />
@@ -33,8 +33,8 @@<br />
<br />
# handle module-specific stuff<br />
#<br />
-my @GRAPHS=("stratum","distance","dispersion","frequency","stability");<br />
-my %LEGENDS=("stratum"=>" ","distance"=>"seconds","dispersion"=>"seconds","frequency"=>"ppm","stability"=>"ppm");<br />
+my @GRAPHS=("stratum","distance","dispersion","jitter","stability","broadcastdelay","authdelay");<br />
+my %LEGENDS=("stratum"=>" ","distance"=>"seconds","dispersion"=>"seconds","jitter"=>"seconds","stability"=>"ppm","broadcastdelay"=>"seconds","authdelay"=>"seconds");<br />
push @OPTIONS,(<br />
"--alt-autoscale-max"); # alternate scaling<br />
<br />
</pre><br />
<br />
makeindex.pl<br />
<pre><br />
--- /usr/local/src/sys/HotSaNIC/modules/ntp/makeindex.pl 2004-06-03 08:25:10.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/ntp/makeindex.pl 2006-03-20 10:09:42.065613912 +0900<br />
@@ -29,7 +29,7 @@<br />
%MODCONFIG=HotSaNICmod::common::configure();<br />
@DIAGRAMS=("hour","6h","day","week","month","year");<br />
@TIMES=("6h","week");<br />
-@GRAPHS=("stratum","distance","dispersion","frequency","stability");<br />
+@GRAPHS=("stratum","distance","dispersion","jitter","stability","broadcastdelay","authdelay");<br />
<br />
# build time-based .html files<br />
#<br />
</pre><br />
<br />
makerrd<br />
<pre><br />
--- /usr/local/src/sys/HotSaNIC/modules/ntp/makerrd 2004-05-18 03:31:58.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/ntp/makerrd 2006-03-20 10:06:04.466164389 +0900<br />
@@ -16,9 +16,11 @@<br />
$BINPATH/rrdtool create rrd/$PROC.rrd --step 10 \<br />
DS:dispersion:GAUGE:300:0:$MAX \<br />
DS:distance:GAUGE:300:0:$MAX \<br />
- DS:frequency:GAUGE:300:-10000:10000 \<br />
+ DS:jitter:GAUGE:300:0:$MAX \<br />
DS:stability:GAUGE:300:0:$MAX \<br />
DS:stratum:GAUGE:300:0:20 \<br />
+ DS:broadcastdelay:GAUGE:300:0:$MAX \<br />
+ DS:authdelay:GAUGE:300:0:$MAX \<br />
RRA:AVERAGE:0:1:720 \<br />
RRA:AVERAGE:0.3:6:2880 \<br />
RRA:AVERAGE:0.3:60:2016 \<br />
</pre><br />
<br />
in the subdirectory platform<br />
common.pm<br />
<pre><br />
--- /usr/local/src/sys/HotSaNIC/modules/ntp/platform/common.pm 2004-06-03 08:25:10.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/ntp/platform/common.pm 2006-03-20 09:59:15.837619337 +0900<br />
@@ -13,6 +13,7 @@<br />
my @list=HotSaNICparser::locate_files("bin/ntpdc");<br />
if (! @list) { @list=HotSaNICparser::locate_files("bin/xntpdc"); }<br />
$MODCONF{NTPCOMMAND}=pop @list;<br />
+ chomp $MODCONF{NTPCOMMAND};<br />
}<br />
<br />
return %MODCONF;<br />
</pre><br />
<br />
default.pm<br />
<pre><br />
--- /usr/local/src/sys/HotSaNIC/modules/ntp/platform/default.pm 2004-07-06 05:40:31.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/ntp/platform/default.pm 2006-03-20 10:07:04.107497582 +0900<br />
@@ -24,12 +24,14 @@<br />
$str=$value if $var eq "stratum";<br />
$dst=$value if $var eq "root distance";<br />
$dps=$value if $var eq "root dispersion";<br />
- $frq=$value if $var eq "frequency";<br />
+ $jtr=$value if $var eq "jitter"; # changed that from frequency<br />
$stb=$value if $var eq "stability";<br />
+ $bcdly=$value if $var eq "broadcastdelay";<br />
+ $athdly=$value if $var eq "authdelay";<br />
}<br />
close FILE;<br />
-<br />
- HotSaNICmod::do_rrd($dbname,"U",time,$dps,$dst,$frq,$stb,$str);<br />
+ HotSaNICmod::do_rrd($dbname,"U",time,$dps,$dst,$jtr,$stb,$str,$bcdly,$athdly);<br />
}<br />
}<br />
<br />
</pre><br />
<br />
after patching the files and you have already a rrd file there you need to remove it (yes, you loose all data). You also need to run the makeindex.pl file again to regenerate the html files<br />
<br />
=== Add more detailed error legend in Postfix queue log ===<br />
<br />
The default postfix queue graph has already a nice list of errors, but there are some which can be also shown to be more detailed. Especially 4x errors.<br />
<br />
Below some patches to add this to the vaniall mailq without the multiple postfix patch. The multiple postfix patch has this one already included.<br />
<br />
diagrams.pl<br />
<pre><br />
--- /usr/local/src/HotSaNIC/modules/mailq/diagrams.pl 2004-05-24 08:53:39.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/mailq/diagrams.pl 2006-03-23 12:53:27.843497000 +0900<br />
@@ -113,8 +113,12 @@<br />
"DEF:ctimeout=$DB_FILE:ctimeout:AVERAGE",<br />
"DEF:rtimeout=$DB_FILE:rtimeout:AVERAGE",<br />
"DEF:nohost=$DB_FILE:nohost:AVERAGE",<br />
+ "DEF:noroute=$DB_FILE:noroute:AVERAGE",<br />
+ "DEF:err450=$DB_FILE:err450:AVERAGE",<br />
+ "DEF:err421=$DB_FILE:err421:AVERAGE",<br />
+ "DEF:err4=$DB_FILE:err4:AVERAGE",<br />
"DEF:other=$DB_FILE:other:AVERAGE",<br />
- "CDEF:active=req,crefused,-,msrefused,-,ctimeout,-,rtimeout,-,nohost,-,other,-,");<br />
+ "CDEF:active=req,crefused,-,msrefused,-,ctimeout,-,rtimeout,-,nohost,-,noroute,-,err450,-,err421,-,err4,-,other,-,");<br />
<br />
if ($range ne "1h") {<br />
push @COMMANDS,("DEF:maxreq=$DB_FILE:req:MAX",<br />
@@ -128,8 +132,12 @@<br />
HotSaNICdiagram::insert_data("STACK","crefused" ,$MODULECONFIG{COLOR_AREA_CREFUSED} ,"connection refused ",$legends,$LEGEND,1),<br />
HotSaNICdiagram::insert_data("STACK","other" ,$MODULECONFIG{COLOR_AREA_OTHER} ,"other ",$legends,$LEGEND,1),<br />
HotSaNICdiagram::insert_data("STACK","nohost" ,$MODULECONFIG{COLOR_AREA_NOHOST} ,"host not found ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","noroute" ,$MODULECONFIG{COLOR_AREA_NOROUTE} ,"route not found ",$legends,$LEGEND,1),<br />
HotSaNICdiagram::insert_data("STACK","ctimeout" ,$MODULECONFIG{COLOR_AREA_CTIMEOUT} ,"connection timed out",$legends,$LEGEND,1),<br />
HotSaNICdiagram::insert_data("STACK","rtimeout" ,$MODULECONFIG{COLOR_AREA_RTIMEOUT} ,"read timed out ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","err450" ,$MODULECONFIG{COLOR_AREA_ERR450} ,"450 mbox not okay ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","err421" ,$MODULECONFIG{COLOR_AREA_ERR421} ,"421 service not okay",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","err4" ,$MODULECONFIG{COLOR_AREA_ERR4} ,"general 4xx error ",$legends,$LEGEND,1),<br />
HotSaNICdiagram::insert_data("STACK","active" ,$MODULECONFIG{COLOR_AREA} ,"active ",$legends,$LEGEND,1),<br />
"LINE1:req#".$MODULECONFIG{COLOR_LINE}.":",<br />
HotSaNICdiagram::insert_lines(%MODULECONFIG));<br />
</pre><br />
<br />
makerrd<br />
<pre><br />
--- /usr/local/src/HotSaNIC/modules/mailq/makerrd 2004-04-19 01:35:24.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/mailq/makerrd 2006-03-23 12:13:07.296222250 +0900<br />
@@ -18,6 +18,10 @@<br />
DS:nohost:GAUGE:300:0:U \<br />
DS:other:GAUGE:300:0:U \<br />
DS:msrefused:GAUGE:300:0:U \<br />
+ DS:noroute:GAUGE:300:0:U \<br />
+ DS:err450:GAUGE:300:0:U \<br />
+ DS:err421:GAUGE:300:0:U \<br />
+ DS:err4:GAUGE:300:0:U \<br />
RRA:AVERAGE:0:1:720 \<br />
RRA:AVERAGE:0.3:6:2880 \<br />
RRA:AVERAGE:0.3:60:2016 \<br />
</pre><br />
<br />
in the platform folder<br />
default.pm<br />
<pre><br />
--- /usr/local/src/HotSaNIC/modules/mailq/platform/default.pm 2004-07-01 19:28:50.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/mailq/platform/default.pm 2006-03-23 13:39:45.393083000 +0900<br />
@@ -19,6 +19,10 @@<br />
$other=0;<br />
$msrefused=0;<br />
$active=0;<br />
+ $noroute=0;<br />
+ $err450=0;<br />
+ $err421=0;<br />
+ $err4=0;<br />
<br />
open FILE,"mailq|";<br />
while (<FILE>) {<br />
@@ -29,15 +33,19 @@<br />
elsif (index($_,"Host not found") >=0 ) { $nohost++; }<br />
elsif (index($_,"read timeout") >=0 ) { $rtimeout++; }<br />
elsif (index($_,"server refused mail service") >=0 ) { $msrefused++; }<br />
+ elsif (index($_,"No route to host") >=0 ) { $noroute++; }<br />
+ elsif (index($_,"said: 450") >=0 ) { $err450++; }<br />
+ elsif (index($_,"said: 421") >=0 ) { $err421++; }<br />
+ elsif (index($_,"said: 4") >=0 ) { $err4++; } # all other 4xx errors are collected here<br />
else { $other++; }<br />
}<br />
elsif (/^--/o) { (undef,$kbytes)=split; }<br />
}<br />
close FILE;<br />
<br />
- my $req=$crefused+$ctimeout+$rtimeout+$nohost+$other+$msrefused+$active;<br />
+ my $req=$crefused+$ctimeout+$rtimeout+$nohost+$other+$msrefused+$active+$noroute+$err450+$err421+$err4;<br />
<br />
- HotSaNICmod::do_rrd("queue","U",time,$kbytes,$req,$crefused,$ctimeout,$rtimeout,$nohost,$other,$msrefused);<br />
+ HotSaNICmod::do_rrd("queue","U",time,$kbytes,$req,$crefused,$ctimeout,$rtimeout,$nohost,$other,$msrefused,$noroute,$err450,$err421,$err4);<br />
<br />
}<br />
<br />
</pre><br />
<br />
if you have already an rrd, you need to remove it, as this patche changes the rrd file layout. Old data will be lost.<br />
<br />
=== Postfix Module patch to have it check 'n' postfix servers on one box ===<br />
<br />
I have a special setup where I have ten postfix servers running on one box. I wanted to monitor them with the postfix module from HotSaNIC to get the current processes count and mails in the queue.<br />
<br />
This is quite a majour change, it works fine for me. Remove the rrd and config files because the configuration has to be created new. Also the rrd file layout changes, so old rrd files and their data will be lost.<br />
<br />
[[HotSaNIC/multiple_postfix_module|Patches for multiple postfixes module]]</div>Gullevekhttps://amd.co.at/adminwiki/HotSaNICHotSaNIC2006-05-26T01:20:17Z<p>Gullevek: Hotsanic and module patches</p>
<hr />
<div>= HotSaNIC monitoring =<br />
<br />
== Overview ==<br />
<br />
HotSaNIC is system that reads data through a perl daemon and uses rrd to store and create graphs for the system. It is very similar to [[munin]], but it lacks of a client-server system. As [[munin]] it can have plugins, but they are more difficult to write.<br />
<br />
The advantage from HotSaNIC is the very high resolution, it reads the data every view seconds and gets therefore very accurate results. This is good for monitoring network traffic, processes and similar quick changing events.<br />
<br />
The disadvantage is, that it creates the graphs on the server itself and cannot offload this task to a remote system. It therefore has to use some CPU time for it. This can be limited to create the graphs only every view hours, or depending on how often you want to check your graphs. In my opinion it would be better to have a cgi script like [[cricket]] has to create the graphs only when needed, when the page is viewed.<br />
<br />
The current CVS version is recommended as it has all patches to work with current kernels. Hotsanic daemon runs as root and therefore has no problems with grs or other secure kernels.<br />
<br />
== Additional Modules / Changed Modules ==<br />
<br />
=== NTP Patch to work with current ntp daemon ===<br />
<br />
The ntp module from HotSaNIC works, but misses some data because of some output change from the ntpdaemon. I wrote a small patch to fix this.<br />
<br />
Patches below<br />
<br />
diagrams.pl<br />
<pre><br />
--- /usr/local/src/sys/HotSaNIC/modules/ntp/diagrams.pl 2004-06-03 08:25:10.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/ntp/diagrams.pl 2006-03-20 10:13:06.447836886 +0900<br />
@@ -33,8 +33,8 @@<br />
<br />
# handle module-specific stuff<br />
#<br />
-my @GRAPHS=("stratum","distance","dispersion","frequency","stability");<br />
-my %LEGENDS=("stratum"=>" ","distance"=>"seconds","dispersion"=>"seconds","frequency"=>"ppm","stability"=>"ppm");<br />
+my @GRAPHS=("stratum","distance","dispersion","jitter","stability","broadcastdelay","authdelay");<br />
+my %LEGENDS=("stratum"=>" ","distance"=>"seconds","dispersion"=>"seconds","jitter"=>"seconds","stability"=>"ppm","broadcastdelay"=>"seconds","authdelay"=>"seconds");<br />
push @OPTIONS,(<br />
"--alt-autoscale-max"); # alternate scaling<br />
<br />
</pre><br />
<br />
makeindex.pl<br />
<pre><br />
--- /usr/local/src/sys/HotSaNIC/modules/ntp/makeindex.pl 2004-06-03 08:25:10.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/ntp/makeindex.pl 2006-03-20 10:09:42.065613912 +0900<br />
@@ -29,7 +29,7 @@<br />
%MODCONFIG=HotSaNICmod::common::configure();<br />
@DIAGRAMS=("hour","6h","day","week","month","year");<br />
@TIMES=("6h","week");<br />
-@GRAPHS=("stratum","distance","dispersion","frequency","stability");<br />
+@GRAPHS=("stratum","distance","dispersion","jitter","stability","broadcastdelay","authdelay");<br />
<br />
# build time-based .html files<br />
#<br />
</pre><br />
<br />
makerrd<br />
<pre><br />
--- /usr/local/src/sys/HotSaNIC/modules/ntp/makerrd 2004-05-18 03:31:58.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/ntp/makerrd 2006-03-20 10:06:04.466164389 +0900<br />
@@ -16,9 +16,11 @@<br />
$BINPATH/rrdtool create rrd/$PROC.rrd --step 10 \<br />
DS:dispersion:GAUGE:300:0:$MAX \<br />
DS:distance:GAUGE:300:0:$MAX \<br />
- DS:frequency:GAUGE:300:-10000:10000 \<br />
+ DS:jitter:GAUGE:300:0:$MAX \<br />
DS:stability:GAUGE:300:0:$MAX \<br />
DS:stratum:GAUGE:300:0:20 \<br />
+ DS:broadcastdelay:GAUGE:300:0:$MAX \<br />
+ DS:authdelay:GAUGE:300:0:$MAX \<br />
RRA:AVERAGE:0:1:720 \<br />
RRA:AVERAGE:0.3:6:2880 \<br />
RRA:AVERAGE:0.3:60:2016 \<br />
</pre><br />
<br />
in the subdirectory platform<br />
common.pm<br />
<pre><br />
--- /usr/local/src/sys/HotSaNIC/modules/ntp/platform/common.pm 2004-06-03 08:25:10.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/ntp/platform/common.pm 2006-03-20 09:59:15.837619337 +0900<br />
@@ -13,6 +13,7 @@<br />
my @list=HotSaNICparser::locate_files("bin/ntpdc");<br />
if (! @list) { @list=HotSaNICparser::locate_files("bin/xntpdc"); }<br />
$MODCONF{NTPCOMMAND}=pop @list;<br />
+ chomp $MODCONF{NTPCOMMAND};<br />
}<br />
<br />
return %MODCONF;<br />
</pre><br />
<br />
default.pm<br />
<pre><br />
--- /usr/local/src/sys/HotSaNIC/modules/ntp/platform/default.pm 2004-07-06 05:40:31.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/ntp/platform/default.pm 2006-03-20 10:07:04.107497582 +0900<br />
@@ -24,12 +24,14 @@<br />
$str=$value if $var eq "stratum";<br />
$dst=$value if $var eq "root distance";<br />
$dps=$value if $var eq "root dispersion";<br />
- $frq=$value if $var eq "frequency";<br />
+ $jtr=$value if $var eq "jitter"; # changed that from frequency<br />
$stb=$value if $var eq "stability";<br />
+ $bcdly=$value if $var eq "broadcastdelay";<br />
+ $athdly=$value if $var eq "authdelay";<br />
}<br />
close FILE;<br />
-<br />
- HotSaNICmod::do_rrd($dbname,"U",time,$dps,$dst,$frq,$stb,$str);<br />
+ HotSaNICmod::do_rrd($dbname,"U",time,$dps,$dst,$jtr,$stb,$str,$bcdly,$athdly);<br />
}<br />
}<br />
<br />
</pre><br />
<br />
after patching the files and you have already a rrd file there you need to remove it (yes, you loose all data). You also need to run the makeindex.pl file again to regenerate the html files<br />
<br />
=== Add more detailed error legend in Postfix queue log ===<br />
<br />
The default postfix queue graph has already a nice list of errors, but there are some which can be also shown to be more detailed. Especially 4x errors.<br />
<br />
Below some patches to add this to the vaniall mailq without the multiple postfix patch. The multiple postfix patch has this one already included.<br />
<br />
diagrams.pl<br />
<pre><br />
--- /usr/local/src/HotSaNIC/modules/mailq/diagrams.pl 2004-05-24 08:53:39.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/mailq/diagrams.pl 2006-03-23 12:53:27.843497000 +0900<br />
@@ -113,8 +113,12 @@<br />
"DEF:ctimeout=$DB_FILE:ctimeout:AVERAGE",<br />
"DEF:rtimeout=$DB_FILE:rtimeout:AVERAGE",<br />
"DEF:nohost=$DB_FILE:nohost:AVERAGE",<br />
+ "DEF:noroute=$DB_FILE:noroute:AVERAGE",<br />
+ "DEF:err450=$DB_FILE:err450:AVERAGE",<br />
+ "DEF:err421=$DB_FILE:err421:AVERAGE",<br />
+ "DEF:err4=$DB_FILE:err4:AVERAGE",<br />
"DEF:other=$DB_FILE:other:AVERAGE",<br />
- "CDEF:active=req,crefused,-,msrefused,-,ctimeout,-,rtimeout,-,nohost,-,other,-,");<br />
+ "CDEF:active=req,crefused,-,msrefused,-,ctimeout,-,rtimeout,-,nohost,-,noroute,-,err450,-,err421,-,err4,-,other,-,");<br />
<br />
if ($range ne "1h") {<br />
push @COMMANDS,("DEF:maxreq=$DB_FILE:req:MAX",<br />
@@ -128,8 +132,12 @@<br />
HotSaNICdiagram::insert_data("STACK","crefused" ,$MODULECONFIG{COLOR_AREA_CREFUSED} ,"connection refused ",$legends,$LEGEND,1),<br />
HotSaNICdiagram::insert_data("STACK","other" ,$MODULECONFIG{COLOR_AREA_OTHER} ,"other ",$legends,$LEGEND,1),<br />
HotSaNICdiagram::insert_data("STACK","nohost" ,$MODULECONFIG{COLOR_AREA_NOHOST} ,"host not found ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","noroute" ,$MODULECONFIG{COLOR_AREA_NOROUTE} ,"route not found ",$legends,$LEGEND,1),<br />
HotSaNICdiagram::insert_data("STACK","ctimeout" ,$MODULECONFIG{COLOR_AREA_CTIMEOUT} ,"connection timed out",$legends,$LEGEND,1),<br />
HotSaNICdiagram::insert_data("STACK","rtimeout" ,$MODULECONFIG{COLOR_AREA_RTIMEOUT} ,"read timed out ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","err450" ,$MODULECONFIG{COLOR_AREA_ERR450} ,"450 mbox not okay ",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","err421" ,$MODULECONFIG{COLOR_AREA_ERR421} ,"421 service not okay",$legends,$LEGEND,1),<br />
+ HotSaNICdiagram::insert_data("STACK","err4" ,$MODULECONFIG{COLOR_AREA_ERR4} ,"general 4xx error ",$legends,$LEGEND,1),<br />
HotSaNICdiagram::insert_data("STACK","active" ,$MODULECONFIG{COLOR_AREA} ,"active ",$legends,$LEGEND,1),<br />
"LINE1:req#".$MODULECONFIG{COLOR_LINE}.":",<br />
HotSaNICdiagram::insert_lines(%MODULECONFIG));<br />
</pre><br />
<br />
makerrd<br />
<pre><br />
--- /usr/local/src/HotSaNIC/modules/mailq/makerrd 2004-04-19 01:35:24.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/mailq/makerrd 2006-03-23 12:13:07.296222250 +0900<br />
@@ -18,6 +18,10 @@<br />
DS:nohost:GAUGE:300:0:U \<br />
DS:other:GAUGE:300:0:U \<br />
DS:msrefused:GAUGE:300:0:U \<br />
+ DS:noroute:GAUGE:300:0:U \<br />
+ DS:err450:GAUGE:300:0:U \<br />
+ DS:err421:GAUGE:300:0:U \<br />
+ DS:err4:GAUGE:300:0:U \<br />
RRA:AVERAGE:0:1:720 \<br />
RRA:AVERAGE:0.3:6:2880 \<br />
RRA:AVERAGE:0.3:60:2016 \<br />
</pre><br />
<br />
in the platform folder<br />
default.pm<br />
<pre><br />
--- /usr/local/src/HotSaNIC/modules/mailq/platform/default.pm 2004-07-01 19:28:50.000000000 +0900<br />
+++ /usr/local/HotSaNIC/modules/mailq/platform/default.pm 2006-03-23 13:39:45.393083000 +0900<br />
@@ -19,6 +19,10 @@<br />
$other=0;<br />
$msrefused=0;<br />
$active=0;<br />
+ $noroute=0;<br />
+ $err450=0;<br />
+ $err421=0;<br />
+ $err4=0;<br />
<br />
open FILE,"mailq|";<br />
while (<FILE>) {<br />
@@ -29,15 +33,19 @@<br />
elsif (index($_,"Host not found") >=0 ) { $nohost++; }<br />
elsif (index($_,"read timeout") >=0 ) { $rtimeout++; }<br />
elsif (index($_,"server refused mail service") >=0 ) { $msrefused++; }<br />
+ elsif (index($_,"No route to host") >=0 ) { $noroute++; }<br />
+ elsif (index($_,"said: 450") >=0 ) { $err450++; }<br />
+ elsif (index($_,"said: 421") >=0 ) { $err421++; }<br />
+ elsif (index($_,"said: 4") >=0 ) { $err4++; } # all other 4xx errors are collected here<br />
else { $other++; }<br />
}<br />
elsif (/^--/o) { (undef,$kbytes)=split; }<br />
}<br />
close FILE;<br />
<br />
- my $req=$crefused+$ctimeout+$rtimeout+$nohost+$other+$msrefused+$active;<br />
+ my $req=$crefused+$ctimeout+$rtimeout+$nohost+$other+$msrefused+$active+$noroute+$err450+$err421+$err4;<br />
<br />
- HotSaNICmod::do_rrd("queue","U",time,$kbytes,$req,$crefused,$ctimeout,$rtimeout,$nohost,$other,$msrefused);<br />
+ HotSaNICmod::do_rrd("queue","U",time,$kbytes,$req,$crefused,$ctimeout,$rtimeout,$nohost,$other,$msrefused,$noroute,$err450,$err421,$err4);<br />
<br />
}<br />
<br />
</pre><br />
<br />
if you have already an rrd, you need to remove it, as this patche changes the rrd file layout. Old data will be lost.<br />
<br />
=== Postfix Module patch to have it check 'n' postfix servers on one box ===<br />
<br />
I have a special setup where I have ten postfix servers running on one box. I wanted to monitor them with the postfix module from HotSaNIC to get the current processes count and mails in the queue.<br />
<br />
This is quite a majour change, it works fine for me. Remove the rrd and config files because the configuration has to be created new. Also the rrd file layout changes, so old rrd files and their data will be lost.<br />
<br />
[[HotSaNIC/multile_postfix_module|Patches for multiple postfixes module]]</div>Gullevekhttps://amd.co.at/adminwiki/HP_SSL1016_tape_autoloaderHP SSL1016 tape autoloader2006-05-26T00:34:28Z<p>Gullevek: HP SSL1016 tape autoloader</p>
<hr />
<div>= HP SSL1016 tape autoloader =<br />
<br />
This Autoloader has two magazines which can hold each 8 Ultrium Tapes. The model comes with one Ultrium Drive up to 400/800 GB Tapes. It has an front mail slot for quick load or eject of a single tape.<br />
<br />
The Autoloader has a webinterface for management for the tapes, like load, eject, move, firmware upgrade and other diagnostic runs. It is connected through an UW-3 SCSI. I recommend a dedicated card to keep up with the high speed from the Ultrium Tape.<br />
<br />
== Mechanical Problems and Solutions ==<br />
<br />
As this is a mechanical thing with tons of moving parts things can get stuck. Possible problems are mostly a stuck tape in the loader arm.<br />
<br />
Below I try to explain how to get tapes out and how te remove the magazines manualy.<br />
<br />
Please refer also to the manual, but it is a bit confusing sometimes, so I try to give a more detailed description here<br />
<br />
=== Remove the Magazines ===</div>Gullevekhttps://amd.co.at/adminwiki/HardwareHardware2006-05-26T00:28:52Z<p>Gullevek: </p>
<hr />
<div>= Storage solutions =<br />
* Hardware<br />
* Software<br />
* everything else<br />
<br />
= Servers =<br />
* complete vs barebone vs DIY servers<br />
* [[Hardware/Remote Management|Remote Management]] (ILOs)<br />
<br />
= Tape Drives / Auto Loader =<br />
<br />
For long term backup tapes are still the best solution. For huge amounts of data an autoloader is must. Its a mechanical beast with damn moving parts that tend to get stuck/break/do other things.<br />
<br />
== Autoloaders==<br />
<br />
*[[HP SSL1016 tape autoloader]]</div>Gullevekhttps://amd.co.at/adminwiki/PostgreSQLPostgreSQL2006-05-25T01:15:12Z<p>Gullevek: /* Table Size */</p>
<hr />
<div>= General =<br />
<br />
= Setup =<br />
<br />
== Storage ==<br />
<br />
As for every tranactional database, disk I/O is the main limiting factor for PostgresSQL. If you plan to deploy a high-usage database please take some precautions on the used storage. Use either a RAID 1 or 10 and choose a FS that does fast block-IO (ext2).<br />
<br />
== Accounts and permissions ==<br />
<br />
When starting with a fresh database, you've to [http://www.postgresql.org/docs/8.1/interactive/user-manag.html create some users] first before you can start using it.<br />
<br />
Basic steps:<br />
<br />
<pre><br />
su - postgresql<br />
createuser -P <user><br />
createdb -O <user> <db><br />
</pre><br />
<br />
<br />
<br />
Also be sure to tune the [http://www.postgresql.org/docs/8.1/interactive/client-authentication.html pg_hba.conf] in the data-directory to your needs. To emulate MySQLs default "every user needs to authenticate from everywhere"-semantics use the following config:<br />
<br />
<pre><br />
local all all md5<br />
host all all 127.0.0.1/32 md5<br />
host all all ::1/128 md5 <br />
</pre><br />
<br />
= Maintenance =<br />
<br />
== Vacuuming ==<br />
<br />
=== What? ===<br />
<br />
Since PostgresSQL is a transactional database, old rows don't get actually removed/replaced when you update/delete them (since they might be still needed in older/long running transactions). To actually free them you need to issue a [http://www.postgresql.org/docs/8.1/interactive/maintenance.html vacuum].<br />
<br />
A normal vacuum will only mark deprecated rows for reuse, to actually reclaim diskspace (e.g. when having deleted large amounts of data) you need to issue a full vacuum. Please note that it might be faster to backup the data you want to keep and truncate the table if you plan to remove large portions of a table.<br />
<br />
=== autovacuum ===<br />
<br />
== Fixing broken databases ==<br />
<br />
set zero_damaged_pages to on;<br />
vacuum;<br />
pray;<br />
<br />
== Table Size ==<br />
<br />
If you want to know which table in your database claims the most diskspace, here is a query that returns the size of the tables from the current database.<br />
<br />
A block is 8192 bytes therefore I calculate the kb size in an extra column.<br />
''relfilenode'' column holds the file name for this table / data. You can find it in the data directory from postgres (main/).<br />
The ''relkind'' column holds the type of the data and ''reltuples'' the count of rows in this table.<br />
<br />
SELECT relname, relfilenode, relkind, reltuples, relpages, ((relpages * 8192) / 1024) as relpages_kb FROM pg_class ORDER BY relpages DESC ;<br />
<br />
example output:<br />
<br />
<pre><br />
relname | relfilenode | relkind | reltuples | relpages | relpages_kb<br />
----------------------------------+-------------+---------+-----------+----------+-------------<br />
pg_toast_3377061 | 3377067 | t | 1982 | 433 | 3464<br />
user_logging | 3377300 | r | 3313 | 243 | 1944<br />
pg_proc_proname_args_nsp_index | 16642 | i | 1695 | 138 | 1104<br />
article_menu | 3377283 | r | 8267 | 124 | 992<br />
article_menu_pkey | 3395779 | i | 8267 | 74 | 592<br />
article_element | 3377234 | r | 2799 | 69 | 552<br />
</pre><br />
<br />
= Accessing the Database =<br />
<br />
== psql and other CLI programs ==<br />
<br />
=== psql and no password login ===<br />
<br />
pgsql, command unlike the mysql command, has no option for a password. But there are two ways to go around this in a very efficient way.<br />
<br />
''enviroment variable''<br />
export PGPASSWORD=password<br />
export PGUSER=username<br />
export PGHOST=host<br />
<br />
with PGPASSWORD set you can start hacking away your bash scripts.<br />
<br />
with a ~/.pgpass file<br />
<br />
[http://www.postgresql.org/docs/8.1/static/libpq-pgpass.html|Postgres (8.1) pgpass Documentation]<br />
<br />
basically just<br />
hostname:port:database:username:password</div>Gullevekhttps://amd.co.at/adminwiki/PostgreSQLPostgreSQL2006-05-25T01:04:26Z<p>Gullevek: </p>
<hr />
<div>= General =<br />
<br />
= Setup =<br />
<br />
== Storage ==<br />
<br />
As for every tranactional database, disk I/O is the main limiting factor for PostgresSQL. If you plan to deploy a high-usage database please take some precautions on the used storage. Use either a RAID 1 or 10 and choose a FS that does fast block-IO (ext2).<br />
<br />
== Accounts and permissions ==<br />
<br />
When starting with a fresh database, you've to [http://www.postgresql.org/docs/8.1/interactive/user-manag.html create some users] first before you can start using it.<br />
<br />
Basic steps:<br />
<br />
<pre><br />
su - postgresql<br />
createuser -P <user><br />
createdb -O <user> <db><br />
</pre><br />
<br />
<br />
<br />
Also be sure to tune the [http://www.postgresql.org/docs/8.1/interactive/client-authentication.html pg_hba.conf] in the data-directory to your needs. To emulate MySQLs default "every user needs to authenticate from everywhere"-semantics use the following config:<br />
<br />
<pre><br />
local all all md5<br />
host all all 127.0.0.1/32 md5<br />
host all all ::1/128 md5 <br />
</pre><br />
<br />
= Maintenance =<br />
<br />
== Vacuuming ==<br />
<br />
=== What? ===<br />
<br />
Since PostgresSQL is a transactional database, old rows don't get actually removed/replaced when you update/delete them (since they might be still needed in older/long running transactions). To actually free them you need to issue a [http://www.postgresql.org/docs/8.1/interactive/maintenance.html vacuum].<br />
<br />
A normal vacuum will only mark deprecated rows for reuse, to actually reclaim diskspace (e.g. when having deleted large amounts of data) you need to issue a full vacuum. Please note that it might be faster to backup the data you want to keep and truncate the table if you plan to remove large portions of a table.<br />
<br />
=== autovacuum ===<br />
<br />
== Fixing broken databases ==<br />
<br />
set zero_damaged_pages to on;<br />
vacuum;<br />
pray;<br />
<br />
== Table Size ==<br />
<br />
if you want to know which table in your database uses the most data, here is query that returns the size of the tables.<br />
<br />
a block is 8192 bytes, I calculate the kb size in an extra column.<br />
relfilenode column holds the file name for this table / data. you can find it in the data directory (main/).<br />
the relkind, holds the type of the data and reltuples the rows in this column.<br />
<br />
SELECT relname, relfilenode, relkind, reltuples, relpages, ((relpages * 8192) / 1024) as relpages_kb FROM pg_class ORDER BY relpages DESC ;<br />
<br />
example output:<br />
<br />
<pre><br />
relname | relfilenode | relkind | reltuples | relpages | relpages_kb<br />
----------------------------------+-------------+---------+-----------+----------+-------------<br />
pg_toast_3377061 | 3377067 | t | 1982 | 433 | 3464<br />
user_logging | 3377300 | r | 3313 | 243 | 1944<br />
pg_proc_proname_args_nsp_index | 16642 | i | 1695 | 138 | 1104<br />
article_menu | 3377283 | r | 8267 | 124 | 992<br />
article_menu_pkey | 3395779 | i | 8267 | 74 | 592<br />
article_element | 3377234 | r | 2799 | 69 | 552<br />
</pre><br />
<br />
= Accessing the Database =<br />
<br />
== psql and other CLI programs ==<br />
<br />
=== psql and no password login ===<br />
<br />
pgsql, command unlike the mysql command, has no option for a password. But there are two ways to go around this in a very efficient way.<br />
<br />
''enviroment variable''<br />
export PGPASSWORD=password<br />
export PGUSER=username<br />
export PGHOST=host<br />
<br />
with PGPASSWORD set you can start hacking away your bash scripts.<br />
<br />
with a ~/.pgpass file<br />
<br />
[http://www.postgresql.org/docs/8.1/static/libpq-pgpass.html|Postgres (8.1) pgpass Documentation]<br />
<br />
basically just<br />
hostname:port:database:username:password</div>Gullevekhttps://amd.co.at/adminwiki/TeamTeam2006-05-25T00:52:21Z<p>Gullevek: /* Clemens Schwaighofer */</p>
<hr />
<div>== [[User:Robe|Michael Renner]] ==<br />
<br />
Michael works at the [http://unternehmen.geizhals.at/ Preisvergleich Internet Services AG] (better known as [http://www.geizhals.at/ Geizhals]) as a systems administrator and mediator between tech and non-tech employees. In his spare time he maintains the [http://mirror.inode.at/ open source mirror] of [http://www.inode.at Inode Austria].<br />
<br />
[http://amd.co.at/ Private homepage]<br />
<br />
== [[User:ch|Christan Hofstädtler]] ==<br />
Christian works at the [http://www.nessus.at/ Nessus Internet Dienstleistungs GmbH] as a systems administrator for the key customer [http://www.uboot.com uboot.com], an Austrian Youth Community.<br />
<br />
== [[User:Gullevek|Clemens Schwaighofer]]==<br />
<br />
Clemens Schwaighofer works for [http://www.tequila.co.jp TEQUILA\Japan] as a ''IT Engineer''. His primary occupation is coding - mostly [http://www.php.net php] and [http://www.perl.org perl] - databases - [http://www.postgresql.org PostgreSQL] and [http://mysql.com MySQL] - and of course keeping the systems up and running.<br />
<br />
[http://www.gullevek.org Private Hompage]<br />
<br />
== [[User:pressy|Martin Preßlaber]] ==<br />
<br />
== [[User:loc|Florian Schicker]] ==</div>Gullevekhttps://amd.co.at/adminwiki/SmartySmarty2006-05-25T00:47:13Z<p>Gullevek: /* add array [] to the html_checkboxes */</p>
<hr />
<div>= Smarty Template Engine for PHP =<br />
<br />
Smarty is the more or less official template engine for PHP.<br />
http://smarty.php.net/<br />
<br />
== Basics ==<br />
<br />
Smarty is very easy to use and very powerful. It gives you the most esiest way to fully seperate code from html - which you should '''ALWAYS''' do.<br />
<br />
== Installation ==<br />
<br />
* Download Smarty and unpack it<br />
* you need only the "libs" folder.<br />
I recommend you rename and call it something like "Smarty-<version>" and create a symlink to it with just the name "Smarty"<br />
* create the following directories:<br />
cache/<br />
configs/<br />
templates_c/<br />
templates/<br />
<br />
''cache'' is the place where smarty keeps cached pages if the feature is turned on. ''configs'' holds config include files for smarty. ''templates_c'' is the compile directory for smarty. ''templates'' is the directory for holding the templates.<br />
''cache'' and ''templates_c'' need to be writeable by the web server.<br />
* thats it you are done and can start using smarty.<br />
<br />
== Tips and Tricks ==<br />
<br />
=== How to use compile & caching if you have more than one template set. ===<br />
<br />
I have certain projects where I have more than one template set. So in the default setting of smarty I get a caching and compile problem, because of the same template name smarty thinks the page has already been compiled.<br />
To avoid this use the additionl function parameters.<br />
<br />
$smarty->display($template, $cache_id, $compile_id);<br />
$smarty->is_cached(...);<br />
$smarty->clear_cache(...);<br />
<br />
with adding ''$cache_id'' and ''$compile_id'' you can make the template unique in the ''templates_c'' directory. <br />
<br />
I recommend to add page ids, or other unique sets to the ''cache_id'' to make the template unique for the cache. Important if one template has several languages or different content depending on the same id. Remember the cached file will be used whenever ''display'' finds a match.<br />
<br />
For the ''compile_id'' I would add the complete template path. I have subdirectories in the ''templates'' directory, so I add the full template path here. Do not worry about special characters, smarty escapes them.<br />
<br />
== Extensions to Smarty ==<br />
<br />
some extensions to smarty. Can be addition functions, blocks or other extensions.<br />
<br />
=== used gettext for language translation in smarty ===<br />
<br />
to be done by gullevek (perhaps on extra page):<br />
<br />
* smarty extend class code<br />
* t block code<br />
* extra classed needed<br />
* examples<br />
<br />
=== add array [] to the html_checkboxes ===<br />
<br />
if you want to send several checkboxes as an array you can simply add [] to the name. It works in smarty unless you need to have a value inside. So I wrote a small patch for the ''function.html_checkboxes'' file<br />
<br />
'''link to the patch'''<br />
<br />
the patch adds a new element in the ''{html_checkboxes}'' smarty element called ''pos''. The value given is an array which values are used as values inbetween [].</div>Gullevekhttps://amd.co.at/adminwiki/BashBash2006-05-25T00:46:51Z<p>Gullevek: /* More Documentation */</p>
<hr />
<div>= Bash =<br />
<br />
Bash is the most common shell form on linux, and most other unix systems.<br />
<br />
'''Just a small reminder. Before you start writing a long bash script, think if you can do this in perl.'''<br />
<br />
<br />
== Error and Output Redirect ==<br />
<br />
to redirect output and error<br />
ls -l 1>normal_out 2>error_out<br />
<br />
if you want to have both in one file<br />
ls -l 1>normal_out 2>&1<br />
<br />
== Questions and Solutions ==<br />
<br />
Below some examples for bash problems that might come up<br />
<br />
=== Arrays in Bash: ===<br />
<br />
foo[0]=1;<br />
foo[1]=2;<br />
foo[2]=3;<br />
# loop<br />
for (( i=0; i<${#foo[@]}; i++ ));<br />
do<br />
echo ${foo[$i]};<br />
done;<br />
# more like a foreach<br />
for i in ${foo[@]};<br />
do<br />
echo $i;<br />
done;<br />
<br />
=== Variable Variables ===<br />
<br />
foobar=5;<br />
bar="foobar";<br />
echo $foobar;<br />
echo $bar;<br />
echo ${!bar};<br />
<br />
=== Variable Variables in Arrays ===<br />
<br />
foo[0]=1;<br />
foo[1]=2;<br />
foo[2]=3;<br />
foo_tcp[0]="AT";<br />
foo_upd[0]="AU";<br />
foo_tcp[1]="BT";<br />
foo_upd[1]="BU";<br />
foo_tcp[2]="CT";<br />
foo_upd[2]="CU";<br />
# loop<br />
for (( i=0; i<${#foo[@]}; i++ ));<br />
do<br />
echo ${foo[$i]};<br />
for k in upd tcp;<br />
do<br />
data=foo_${k}[$i];<br />
echo ${!data};<br />
done;<br />
done;<br />
<br />
== More Documentation ==<br />
<br />
The best advanced guide for bash scripting: http://www.tldp.org/LDP/abs/html/</div>Gullevekhttps://amd.co.at/adminwiki/MuninMunin2006-05-25T00:46:13Z<p>Gullevek: /* Munin and GRS and other secure kernels */</p>
<hr />
<div>= Munin =<br />
<br />
Munin is a plain monitoring program with no notification possibility. It uses rrd to store and create graphs for servers. It can use SNMP to monitor windows servers.<br />
<br />
http://munin.projects.linpro.no/<br />
<br />
== How Munin works ==<br />
<br />
Munin has a sort of client / server solution, although the server is just a script that collects the data in certain time periods.<br />
<br />
The client is a node to which the server scripts connect and collect data.<br />
<br />
== Setup Client (Node) ==<br />
<br />
''remark'' for non debian systems, it might be different<br />
<br />
install the ''munin-node'' package and open the ''/etc/munin/munin-node.conf'' file.<br />
<br />
The only things you need to change here is the ''host_name'' and the ''allow'' part. The ''host_name'' is the server name (FQDN). ''allow'' is a regex formated IP which are allowed to access the node.<br />
allow ^127\.0\.0\.1$<br />
allow ^192\.168\.\d{1,3}\.\d{1,3}$<br />
<br />
after changes the munin-node has to be restartet.<br />
To see if the node works, connect to it:<br />
telnet <node ip> 4949<br />
<br />
you will be greeted with a simple screen:<br />
Trying 127.0.0.1...<br />
Connected to localhost.<br />
Escape character is '^]'.<br />
# munin node at linux-debian-clemens.tokyo.tequila.jp<br />
<br />
you can use the following commands ''list'', ''nodes'', ''config'', ''fetch'', ''version'', ''quit''<br />
<br />
== Setup Server ==<br />
<br />
Setting up the server is not more difficult. For Linux/Unix nodes it is nothing more than adding a small config entry into the ''/etc/munin/munin.conf'' file.<br />
<br />
Basic settings are there the db (rrd files), html, log etc is. At least see that the htmldir is correctly set.<br />
<br />
Because the graphs are by default a bit too small - line breaks in the legend make them too high - increase the width to 500<br />
<br />
graph_width 500<br />
<br />
a normal linux/unix node is added like this<br />
<br />
[host.domain.net]<br />
address 192.168.20.15<br />
use_node_name yes<br />
<br />
for adding a windows node please see the excellent guide on the munin homepage:<br />
http://munin.projects.linpro.no/wiki/HowToMonitorWindows<br />
<br />
'''one very important remark''' A windows entry in the server config file has '''NOT''' the ip address from the target server but from the munin server instead. Second the ''use_node_name'' has to be turned off<br />
<br />
[uni.tokyo.tequila.jp]<br />
address 127.0.0.1<br />
use_node_name no<br />
<br />
''MORE CONFIG SETTINGS FOR GROUPINGS NEEDED''<br />
<br />
<br />
== Show Graphs ==<br />
<br />
point your browser to the server where munin runs. In the default the munin directory is in the document root of the default host, eg http://foo.com/munin/<br />
<br />
== Munin and GRS and other secure kernels ==<br />
<br />
Munin runs all its queries as the munin user. Might be good, but it suck because on super secure servers some fail. Eg on a 2.4grs kernel the netstat cannot be run by a normal user, because it cannot access the /proc/net/snmp file. So also munin read fails.<br />
<br />
I did not find out a way around this. Of course you can hack the munin-node.pl file, but I don't think thats the ideal solution<br />
<br />
''SOLUTION NEEDED FOR THIS''<br />
<br />
working around this with sudo does not work either. Although the output looks correct when directly called, it does not work if it is called through node itself.</div>Gullevekhttps://amd.co.at/adminwiki/DebianDebian2006-05-25T00:45:47Z<p>Gullevek: /* Install missing keys for apt-get */</p>
<hr />
<div>= Evaluation =<br />
<br />
Pro-contra<br />
<br />
= Tips and tricks =<br />
<br />
== apt/dpkg ==<br />
<br />
=== How do I check what version package $x gets upgraded to? ===<br />
<br />
apt-cache policy <package><br />
<br />
=== How can I install packages from unstable in testing? Apt-Pinning ===<br />
<br />
apt-pinning is the answer.<br />
<br />
You have to edit or create those configuration files<br />
* /etc/apt/sources<br />
* /etc/apt/apt.conf<br />
* /etc/apt/preferences<br />
<br />
In ''/etc/apt/sources/'' add the other distributions you want to use. For example if you are in testing, add the same entries with unstable or higher.<br />
<br />
# testing<br />
deb http://ftp.debian.org/debian/ testing main contrib<br />
deb-src http://ftp.debian.org/debian/ testing main contrib<br />
# unstable<br />
deb http://ftp.debian.org/debian/ unstable main contrib<br />
deb-src http://ftp.debian.org/debian/ unstable main contrib<br />
# experimental<br />
deb http://ftp.debian.org/debian/ experimental main contrib<br />
deb-src http://ftp.debian.org/debian/ experimental main contrib<br />
<br />
In ''/etc/apt/apt.conf'' set a higher cache limit for apt-get so it doesn't run out of memory during updates<br />
<br />
APT::Cache-Limit "141942904";<br />
<br />
In ''/etc/apt/preferences'' add the higher trees with a lower Priority so they do not overwrite your basic packages from your main tree.<br />
<br />
# testing<br />
Package: *<br />
Pin: release a=testing<br />
Pin-Priority: 650<br />
# unstable<br />
Package: *<br />
Pin: release a=unstable<br />
Pin-Priority: 600<br />
# experimental<br />
Package: *<br />
Pin: release b=experimental<br />
Pin-Priority: 550<br />
<br />
In case you want to have a certain package from eg unstable overrule the testing package, add a new entry like this<br />
<br />
Package: mutt<br />
Pin: release a=unstable<br />
Pin-Priority: 700<br />
<br />
To install packages there are two ways. One is to try to install just the package, and the other way is to install all the packages and also the ones needed to satisfy its dependencies. The second choice is of course more dangerous because it can overwrite important libraries and make your system unstable.<br />
<br />
to install just the package:<br />
<br />
apt-get install <package>/<tree><br />
<br />
to install the package and all needed dependencies:<br />
<br />
apt-get -t <tree> install <package><br />
<br />
''<tree>'' stands for the release, eg ''testing'', ''unstable'', ...<br />
<br />
''more information:''<br />
<br />
http://jaqque.sbih.org/kplug/apt-pinning.html<br />
<br />
=== Install missing keys for apt-get ===<br />
<br />
you have to had gpg run at least one time before, or it will not work.<br />
<br />
to get the gpg key<br />
<br />
gpg --recv-keys <key><br />
<br />
and then import them into the apt-key system<br />
<br />
gpg --export --armor | apt-key add -<br />
<br />
you can also directly download and install the key<br />
<br />
wget http://host.domain.com/keyname.asc -O - | apt-key add -</div>Gullevekhttps://amd.co.at/adminwiki/VimVim2006-05-25T00:42:11Z<p>Gullevek: </p>
<hr />
<div>[http://www.vim.org/ VI Improved] is a common derivate of the default editor on Unix-like systems. Usually, $EDITOR is also set to vi or vim.<br />
<br />
= Package Names =<br />
vi is everywhere, but vim is not.<br />
<br />
* RedHat: [http://rpmfind.net/linux/rpm2html/search.php?query=vim-enhanced vim-enhanced]<br />
* Debian: [http://packages.debian.org/stable/editors/vim vim]<br />
<br />
= Configuration =<br />
<br />
== .vimrc examples ==<br />
<br />
=== Minimalistic Configuration ===<br />
A quick configuration which you can use to get basic stuff like syntax coloring, ready made to past into your .vimrc:<br />
<br />
<pre><br />
set nocompatible<br />
syntax on<br />
filetype plugin indent on<br />
set hlsearch<br />
set history=50<br />
set showmode<br />
set showcmd<br />
<br />
cabbrev Wq wq<br />
cabbrev W w<br />
<br />
colorscheme desert<br />
</pre><br />
<br />
The <tt>desert</tt> colorscheme will let you read comments (which are normally dark-blue) also on wrong-configured terminals and looks pretty good elsewhere too.<br />
<br />
=== A more extended Configuration ===<br />
<br />
Basically like the Minimalistic, but adds some minor tweaks like bs=2 to avoid some terminal backspace key issues, a fixed tabwidth of 4 spaces, a shiftwidth of 4, so if you use the '>' keys it will be a tab and not spaces. And of course a function key shortcut for pastetoggle so you can paste in code without getting to strange intends<br />
<br />
<pre><br />
set nocompatible<br />
set bs=2<br />
set ts=4<br />
set shiftwidth=4<br />
set noexpandtab<br />
set ruler<br />
syn on<br />
filetype plugin indent on<br />
set autoindent<br />
set showmatch<br />
set showcmd<br />
set showmode<br />
set hlsearch<br />
set pastetoggle=<F11><br />
set nolbr<br />
<br />
colorscheme desert<br />
<br />
" Show Numbers On/Off<br />
map <F10> :call Number_on_off()<CR><br />
<br />
let number_mode = 0 " 0 = normal, 1 = show number<br />
<br />
func! Number_on_off()<br />
if g:number_mode == 0<br />
set nu<br />
let g:number_mode = 1<br />
else<br />
set nonu<br />
let g:number_mode = 0<br />
endif<br />
return<br />
endfunc<br />
</pre><br />
<br />
''autointent'' is something I like, some people hate it if vim automatically intents code.</div>Gullevekhttps://amd.co.at/adminwiki/VimVim2006-05-25T00:41:38Z<p>Gullevek: /* Minimalistic Configuration */</p>
<hr />
<div>[http://www.vim.org/ VI Improved] is a common derivate of the default editor on Unix-like systems. Usually, $EDITOR is also set to vi or vim.<br />
<br />
= Package Names =<br />
vi is everywhere, but vim is not.<br />
<br />
* RedHat: [http://rpmfind.net/linux/rpm2html/search.php?query=vim-enhanced vim-enhanced]<br />
* Debian: [http://packages.debian.org/stable/editors/vim vim]<br />
<br />
== .vimrc examples ==<br />
<br />
=== Minimalistic Configuration ===<br />
A quick configuration which you can use to get basic stuff like syntax coloring, ready made to past into your .vimrc:<br />
<br />
<pre><br />
set nocompatible<br />
syntax on<br />
filetype plugin indent on<br />
set hlsearch<br />
set history=50<br />
set showmode<br />
set showcmd<br />
<br />
cabbrev Wq wq<br />
cabbrev W w<br />
<br />
colorscheme desert<br />
</pre><br />
<br />
The <tt>desert</tt> colorscheme will let you read comments (which are normally dark-blue) also on wrong-configured terminals and looks pretty good elsewhere too.<br />
<br />
=== A more extended Configuration ===<br />
<br />
Basically like the Minimalistic, but adds some minor tweaks like bs=2 to avoid some terminal backspace key issues, a fixed tabwidth of 4 spaces, a shiftwidth of 4, so if you use the '>' keys it will be a tab and not spaces. And of course a function key shortcut for pastetoggle so you can paste in code without getting to strange intends<br />
<br />
<pre><br />
set nocompatible<br />
set bs=2<br />
set ts=4<br />
set shiftwidth=4<br />
set noexpandtab<br />
set ruler<br />
syn on<br />
filetype plugin indent on<br />
set autoindent<br />
set showmatch<br />
set showcmd<br />
set showmode<br />
set hlsearch<br />
set pastetoggle=<F11><br />
set nolbr<br />
<br />
colorscheme desert<br />
<br />
" Show Numbers On/Off<br />
map <F10> :call Number_on_off()<CR><br />
<br />
let number_mode = 0 " 0 = normal, 1 = show number<br />
<br />
func! Number_on_off()<br />
if g:number_mode == 0<br />
set nu<br />
let g:number_mode = 1<br />
else<br />
set nonu<br />
let g:number_mode = 0<br />
endif<br />
return<br />
endfunc<br />
</pre><br />
<br />
''autointent'' is something I like, some people hate it if vim automatically intents code.</div>Gullevekhttps://amd.co.at/adminwiki/DebianDebian2006-05-25T00:28:47Z<p>Gullevek: /* apt/dpkg */</p>
<hr />
<div>= Evaluation =<br />
<br />
Pro-contra<br />
<br />
= Tips and tricks =<br />
<br />
== apt/dpkg ==<br />
<br />
=== How do I check what version package $x gets upgraded to? ===<br />
<br />
apt-cache policy <package><br />
<br />
=== How can I install packages from unstable in testing? Apt-Pinning ===<br />
<br />
apt-pinning is the answer.<br />
<br />
You have to edit or create those configuration files<br />
* /etc/apt/sources<br />
* /etc/apt/apt.conf<br />
* /etc/apt/preferences<br />
<br />
In ''/etc/apt/sources/'' add the other distributions you want to use. For example if you are in testing, add the same entries with unstable or higher.<br />
<br />
# testing<br />
deb http://ftp.debian.org/debian/ testing main contrib<br />
deb-src http://ftp.debian.org/debian/ testing main contrib<br />
# unstable<br />
deb http://ftp.debian.org/debian/ unstable main contrib<br />
deb-src http://ftp.debian.org/debian/ unstable main contrib<br />
# experimental<br />
deb http://ftp.debian.org/debian/ experimental main contrib<br />
deb-src http://ftp.debian.org/debian/ experimental main contrib<br />
<br />
In ''/etc/apt/apt.conf'' set a higher cache limit for apt-get so it doesn't run out of memory during updates<br />
<br />
APT::Cache-Limit "141942904";<br />
<br />
In ''/etc/apt/preferences'' add the higher trees with a lower Priority so they do not overwrite your basic packages from your main tree.<br />
<br />
# testing<br />
Package: *<br />
Pin: release a=testing<br />
Pin-Priority: 650<br />
# unstable<br />
Package: *<br />
Pin: release a=unstable<br />
Pin-Priority: 600<br />
# experimental<br />
Package: *<br />
Pin: release b=experimental<br />
Pin-Priority: 550<br />
<br />
In case you want to have a certain package from eg unstable overrule the testing package, add a new entry like this<br />
<br />
Package: mutt<br />
Pin: release a=unstable<br />
Pin-Priority: 700<br />
<br />
To install packages there are two ways. One is to try to install just the package, and the other way is to install all the packages and also the ones needed to satisfy its dependencies. The second choice is of course more dangerous because it can overwrite important libraries and make your system unstable.<br />
<br />
to install just the package:<br />
<br />
apt-get install <package>/<tree><br />
<br />
to install the package and all needed dependencies:<br />
<br />
apt-get -t <tree> install <package><br />
<br />
''<tree>'' stands for the release, eg ''testing'', ''unstable'', ...<br />
<br />
''more information:''<br />
<br />
http://jaqque.sbih.org/kplug/apt-pinning.html<br />
<br />
=== Install missing keys for apt-get ===<br />
<br />
you have to had gpg run at least one time before, or it will not work.<br />
<br />
to get the gpg key<br />
<br />
gpg --recv-keys <key><br />
<br />
and then import them into the apt-key system<br />
<br />
gpg --export --armor | apt-key add -<br />
<br />
you can also directly download and install the key<br />
<br />
wget http://host.domain.com/keyname.asc -O - | apt-key add -<br />
<br />
--[[User:Gullevek|gullevek]] 02:24, 25 May 2006 (CEST)</div>Gullevekhttps://amd.co.at/adminwiki/DebianDebian2006-05-25T00:24:39Z<p>Gullevek: /* apt/dpkg */</p>
<hr />
<div>= Evaluation =<br />
<br />
Pro-contra<br />
<br />
= Tips and tricks =<br />
<br />
== apt/dpkg ==<br />
<br />
=== How do I check what version package $x gets upgraded to? ===<br />
<br />
apt-cache policy <package><br />
<br />
=== How can I install packages from unstable in testing? Apt-Pinning ===<br />
<br />
apt-pinning is the answer.<br />
<br />
You have to edit or create those configuration files<br />
* /etc/apt/sources<br />
* /etc/apt/apt.conf<br />
* /etc/apt/preferences<br />
<br />
In ''/etc/apt/sources/'' add the other distributions you want to use. For example if you are in testing, add the same entries with unstable or higher.<br />
<br />
# testing<br />
deb http://ftp.debian.org/debian/ testing main contrib<br />
deb-src http://ftp.debian.org/debian/ testing main contrib<br />
# unstable<br />
deb http://ftp.debian.org/debian/ unstable main contrib<br />
deb-src http://ftp.debian.org/debian/ unstable main contrib<br />
# experimental<br />
deb http://ftp.debian.org/debian/ experimental main contrib<br />
deb-src http://ftp.debian.org/debian/ experimental main contrib<br />
<br />
In ''/etc/apt/apt.conf'' set a higher cache limit for apt-get so it doesn't run out of memory during updates<br />
<br />
APT::Cache-Limit "141942904";<br />
<br />
In ''/etc/apt/preferences'' add the higher trees with a lower Priority so they do not overwrite your basic packages from your main tree.<br />
<br />
# testing<br />
Package: *<br />
Pin: release a=testing<br />
Pin-Priority: 650<br />
# unstable<br />
Package: *<br />
Pin: release a=unstable<br />
Pin-Priority: 600<br />
# experimental<br />
Package: *<br />
Pin: release b=experimental<br />
Pin-Priority: 550<br />
<br />
In case you want to have a certain package from eg unstable overrule the testing package, add a new entry like this<br />
<br />
Package: mutt<br />
Pin: release a=unstable<br />
Pin-Priority: 700<br />
<br />
To install packages there are two ways. One is to try to install just the package, and the other way is to install all the packages and also the ones needed to satisfy its dependencies. The second choice is of course more dangerous because it can overwrite important libraries and make your system unstable.<br />
<br />
to install just the package:<br />
<br />
apt-get install <package>/<tree><br />
<br />
to install the package and all needed dependencies:<br />
<br />
apt-get -t <tree> install <package><br />
<br />
''<tree>'' stands for the release, eg ''testing'', ''unstable'', ...<br />
<br />
''more information:''<br />
<br />
http://jaqque.sbih.org/kplug/apt-pinning.html<br />
<br />
--[[User:Gullevek|gullevek]] 02:24, 25 May 2006 (CEST)</div>Gullevekhttps://amd.co.at/adminwiki/MuninMunin2006-05-24T06:11:10Z<p>Gullevek: /* Munin and too GRS and other secure kernels */</p>
<hr />
<div>= Munin =<br />
<br />
Munin is a plain monitoring program with no notification possibility. It uses rrd to store and create graphs for servers. It can use SNMP to monitor windows servers.<br />
<br />
http://munin.projects.linpro.no/<br />
<br />
== How Munin works ==<br />
<br />
Munin has a sort of client / server solution, although the server is just a script that collects the data in certain time periods.<br />
<br />
The client is a node to which the server scripts connect and collect data.<br />
<br />
== Setup Client (Node) ==<br />
<br />
''remark'' for non debian systems, it might be different<br />
<br />
install the ''munin-node'' package and open the ''/etc/munin/munin-node.conf'' file.<br />
<br />
The only things you need to change here is the ''host_name'' and the ''allow'' part. The ''host_name'' is the server name (FQDN). ''allow'' is a regex formated IP which are allowed to access the node.<br />
allow ^127\.0\.0\.1$<br />
allow ^192\.168\.\d{1,3}\.\d{1,3}$<br />
<br />
after changes the munin-node has to be restartet.<br />
To see if the node works, connect to it:<br />
telnet <node ip> 4949<br />
<br />
you will be greeted with a simple screen:<br />
Trying 127.0.0.1...<br />
Connected to localhost.<br />
Escape character is '^]'.<br />
# munin node at linux-debian-clemens.tokyo.tequila.jp<br />
<br />
you can use the following commands ''list'', ''nodes'', ''config'', ''fetch'', ''version'', ''quit''<br />
<br />
== Setup Server ==<br />
<br />
Setting up the server is not more difficult. For Linux/Unix nodes it is nothing more than adding a small config entry into the ''/etc/munin/munin.conf'' file.<br />
<br />
Basic settings are there the db (rrd files), html, log etc is. At least see that the htmldir is correctly set.<br />
<br />
Because the graphs are by default a bit too small - line breaks in the legend make them too high - increase the width to 500<br />
<br />
graph_width 500<br />
<br />
a normal linux/unix node is added like this<br />
<br />
[host.domain.net]<br />
address 192.168.20.15<br />
use_node_name yes<br />
<br />
for adding a windows node please see the excellent guide on the munin homepage:<br />
http://munin.projects.linpro.no/wiki/HowToMonitorWindows<br />
<br />
'''one very important remark''' A windows entry in the server config file has '''NOT''' the ip address from the target server but from the munin server instead. Second the ''use_node_name'' has to be turned off<br />
<br />
[uni.tokyo.tequila.jp]<br />
address 127.0.0.1<br />
use_node_name no<br />
<br />
''MORE CONFIG SETTINGS FOR GROUPINGS NEEDED''<br />
<br />
<br />
== Show Graphs ==<br />
<br />
point your browser to the server where munin runs. In the default the munin directory is in the document root of the default host, eg http://foo.com/munin/<br />
<br />
== Munin and GRS and other secure kernels ==<br />
<br />
Munin runs all its queries as the munin user. Might be good, but it suck because on super secure servers some fail. Eg on a 2.4grs kernel the netstat cannot be run by a normal user, because it cannot access the /proc/net/snmp file. So also munin read fails.<br />
<br />
I did not find out a way around this. Of course you can hack the munin-node.pl file, but I don't think thats the ideal solution<br />
<br />
''SOLUTION NEEDED FOR THIS''<br />
<br />
working around this with sudo does not work either. Although the output looks correct when directly called, it does not work if it is called through node itself.<br />
<br />
--[[User:Gullevek|gullevek]] 04:24, 24 May 2006 (CEST)</div>Gullevekhttps://amd.co.at/adminwiki/MuninMunin2006-05-24T05:57:14Z<p>Gullevek: /* Munin and too GRS and other secure kernels */</p>
<hr />
<div>= Munin =<br />
<br />
Munin is a plain monitoring program with no notification possibility. It uses rrd to store and create graphs for servers. It can use SNMP to monitor windows servers.<br />
<br />
http://munin.projects.linpro.no/<br />
<br />
== How Munin works ==<br />
<br />
Munin has a sort of client / server solution, although the server is just a script that collects the data in certain time periods.<br />
<br />
The client is a node to which the server scripts connect and collect data.<br />
<br />
== Setup Client (Node) ==<br />
<br />
''remark'' for non debian systems, it might be different<br />
<br />
install the ''munin-node'' package and open the ''/etc/munin/munin-node.conf'' file.<br />
<br />
The only things you need to change here is the ''host_name'' and the ''allow'' part. The ''host_name'' is the server name (FQDN). ''allow'' is a regex formated IP which are allowed to access the node.<br />
allow ^127\.0\.0\.1$<br />
allow ^192\.168\.\d{1,3}\.\d{1,3}$<br />
<br />
after changes the munin-node has to be restartet.<br />
To see if the node works, connect to it:<br />
telnet <node ip> 4949<br />
<br />
you will be greeted with a simple screen:<br />
Trying 127.0.0.1...<br />
Connected to localhost.<br />
Escape character is '^]'.<br />
# munin node at linux-debian-clemens.tokyo.tequila.jp<br />
<br />
you can use the following commands ''list'', ''nodes'', ''config'', ''fetch'', ''version'', ''quit''<br />
<br />
== Setup Server ==<br />
<br />
Setting up the server is not more difficult. For Linux/Unix nodes it is nothing more than adding a small config entry into the ''/etc/munin/munin.conf'' file.<br />
<br />
Basic settings are there the db (rrd files), html, log etc is. At least see that the htmldir is correctly set.<br />
<br />
Because the graphs are by default a bit too small - line breaks in the legend make them too high - increase the width to 500<br />
<br />
graph_width 500<br />
<br />
a normal linux/unix node is added like this<br />
<br />
[host.domain.net]<br />
address 192.168.20.15<br />
use_node_name yes<br />
<br />
for adding a windows node please see the excellent guide on the munin homepage:<br />
http://munin.projects.linpro.no/wiki/HowToMonitorWindows<br />
<br />
'''one very important remark''' A windows entry in the server config file has '''NOT''' the ip address from the target server but from the munin server instead. Second the ''use_node_name'' has to be turned off<br />
<br />
[uni.tokyo.tequila.jp]<br />
address 127.0.0.1<br />
use_node_name no<br />
<br />
''MORE CONFIG SETTINGS FOR GROUPINGS NEEDED''<br />
<br />
<br />
== Show Graphs ==<br />
<br />
point your browser to the server where munin runs. In the default the munin directory is in the document root of the default host, eg http://foo.com/munin/<br />
<br />
== Munin and too GRS and other secure kernels ==<br />
<br />
Munin runs all its queries as the munin user. Might be good, but it suck because on super secure servers some fail. Eg on a 2.4grs kernel the netstat cannot be run by a normal user, because it cannot access the /proc/net/snmp file. So also munin read fails.<br />
<br />
I did not find out a way around this. Of course you can hack the munin-node.pl file, but I don't think thats the ideal solution<br />
<br />
''SOLUTION NEEDED FOR THIS''<br />
<br />
working around this with sudo does not work either. Although the output looks correct when directly called, it does not work if it is called through node itself.<br />
<br />
--[[User:Gullevek|gullevek]] 04:24, 24 May 2006 (CEST)</div>Gullevekhttps://amd.co.at/adminwiki/MuninMunin2006-05-24T02:48:49Z<p>Gullevek: </p>
<hr />
<div>= Munin =<br />
<br />
Munin is a plain monitoring program with no notification possibility. It uses rrd to store and create graphs for servers. It can use SNMP to monitor windows servers.<br />
<br />
http://munin.projects.linpro.no/<br />
<br />
== How Munin works ==<br />
<br />
Munin has a sort of client / server solution, although the server is just a script that collects the data in certain time periods.<br />
<br />
The client is a node to which the server scripts connect and collect data.<br />
<br />
== Setup Client (Node) ==<br />
<br />
''remark'' for non debian systems, it might be different<br />
<br />
install the ''munin-node'' package and open the ''/etc/munin/munin-node.conf'' file.<br />
<br />
The only things you need to change here is the ''host_name'' and the ''allow'' part. The ''host_name'' is the server name (FQDN). ''allow'' is a regex formated IP which are allowed to access the node.<br />
allow ^127\.0\.0\.1$<br />
allow ^192\.168\.\d{1,3}\.\d{1,3}$<br />
<br />
after changes the munin-node has to be restartet.<br />
To see if the node works, connect to it:<br />
telnet <node ip> 4949<br />
<br />
you will be greeted with a simple screen:<br />
Trying 127.0.0.1...<br />
Connected to localhost.<br />
Escape character is '^]'.<br />
# munin node at linux-debian-clemens.tokyo.tequila.jp<br />
<br />
you can use the following commands ''list'', ''nodes'', ''config'', ''fetch'', ''version'', ''quit''<br />
<br />
== Setup Server ==<br />
<br />
Setting up the server is not more difficult. For Linux/Unix nodes it is nothing more than adding a small config entry into the ''/etc/munin/munin.conf'' file.<br />
<br />
Basic settings are there the db (rrd files), html, log etc is. At least see that the htmldir is correctly set.<br />
<br />
Because the graphs are by default a bit too small - line breaks in the legend make them too high - increase the width to 500<br />
<br />
graph_width 500<br />
<br />
a normal linux/unix node is added like this<br />
<br />
[host.domain.net]<br />
address 192.168.20.15<br />
use_node_name yes<br />
<br />
for adding a windows node please see the excellent guide on the munin homepage:<br />
http://munin.projects.linpro.no/wiki/HowToMonitorWindows<br />
<br />
'''one very important remark''' A windows entry in the server config file has '''NOT''' the ip address from the target server but from the munin server instead. Second the ''use_node_name'' has to be turned off<br />
<br />
[uni.tokyo.tequila.jp]<br />
address 127.0.0.1<br />
use_node_name no<br />
<br />
''MORE CONFIG SETTINGS FOR GROUPINGS NEEDED''<br />
<br />
<br />
== Show Graphs ==<br />
<br />
point your browser to the server where munin runs. In the default the munin directory is in the document root of the default host, eg http://foo.com/munin/<br />
<br />
== Munin and too GRS and other secure kernels ==<br />
<br />
Munin runs all its queries as the munin user. Might be good, but it suck because on super secure servers some fail. Eg on a 2.4grs kernel the netstat cannot be run by a normal user, because it cannot access the /proc/net/snmp file. So also munin read fails.<br />
<br />
I did not find out a way around this. Of course you can hack the munin-node.pl file, but I don't think thats the ideal solution<br />
<br />
''SOLUTION NEEDED FOR THIS''<br />
<br />
--[[User:Gullevek|gullevek]] 04:24, 24 May 2006 (CEST)</div>Gullevekhttps://amd.co.at/adminwiki/MuninMunin2006-05-24T02:24:33Z<p>Gullevek: munin</p>
<hr />
<div>= Munin =<br />
<br />
Munin is a plain monitoring program with no notification possibility. It uses rrd to store and create graphs for servers. It can use SNMP to monitor windows servers.<br />
<br />
http://munin.projects.linpro.no/<br />
<br />
== How Munin works ==<br />
<br />
Munin has a sort of client / server solution, although the server is just a script that collects the data in certain time periods.<br />
<br />
The client is a node to which the server scripts connect and collect data.<br />
<br />
== Setup Client (Node) ==<br />
<br />
''remark'' for non debian systems, it might be different<br />
<br />
install the ''munin-node'' package and open the ''/etc/munin/munin-node.conf'' file.<br />
<br />
The only things you need to change here is the ''host_name'' and the ''allow'' part. The ''host_name'' is the server name (FQDN). ''allow'' is a regex formated IP which are allowed to access the node.<br />
allow ^127\.0\.0\.1$<br />
allow ^192\.168\.\d{1,3}\.\d{1,3}$<br />
<br />
after changes the munin-node has to be restartet.<br />
To see if the node works, connect to it:<br />
telnet <node ip> 4949<br />
<br />
you will be greeted with a simple screen:<br />
Trying 127.0.0.1...<br />
Connected to localhost.<br />
Escape character is '^]'.<br />
# munin node at linux-debian-clemens.tokyo.tequila.jp<br />
<br />
you can use the following commands ''list'', ''nodes'', ''config'', ''fetch'', ''version'', ''quit''<br />
<br />
== Setup Server ==<br />
<br />
Setting up the server is not more difficult. For Linux/Unix nodes it is nothing more than adding a small config entry into the ''/etc/munin/munin.conf'' file.<br />
<br />
Basic settings are there the db (rrd files), html, log etc is. At least see that the htmldir is correctly set.<br />
<br />
Because the graphs are by default a bit too small - line breaks in the legend make them too high - increase the width to 500<br />
<br />
graph_width 500<br />
<br />
a normal linux/unix node is added like this<br />
<br />
[host.domain.net]<br />
address 192.168.20.15<br />
use_node_name yes<br />
<br />
for adding a windows node please see the excellent guide on the munin homepage:<br />
http://munin.projects.linpro.no/wiki/HowToMonitorWindows<br />
<br />
'''one very important remark''' A windows entry in the server config file has '''NOT''' the ip address from the target server but from the munin server instead. Second the ''use_node_name'' has to be turned off<br />
<br />
[uni.tokyo.tequila.jp]<br />
address 127.0.0.1<br />
use_node_name no<br />
<br />
''MORE CONFIG SETTINGS FOR GROUPINGS NEEDED''<br />
<br />
<br />
== Show Graphs ==<br />
<br />
point your browser to the server where munin runs. In the default the munin directory is in the document root of the default host, eg http://foo.com/munin/<br />
<br />
--[[User:Gullevek|gullevek]] 04:24, 24 May 2006 (CEST)</div>Gullevekhttps://amd.co.at/adminwiki/Software_SolutionsSoftware Solutions2006-05-24T02:01:52Z<p>Gullevek: software solutions</p>
<hr />
<div>= Solutions in Software =<br />
<br />
== Backup ==<br />
<br />
* [[rsync]]<br />
* [[bacula]] <br />
* [[arkeia]] (commercial)<br />
<br />
== monitoring ==<br />
<br />
* [[nagios]]<br />
* [[big brother/sister]]<br />
* [[munin]]<br />
* [[smokeping]] <br />
* [[monit]]<br />
* [[HotSaNIC]]<br />
* [[cricket]]<br />
* [[cacti]]<br />
<br />
== migrating servers ==<br />
<br />
* [[rsync/tar/cp]] -a <br />
<br />
== AAA ==<br />
<br />
* [[pam/nss]]<br />
* [[ldap]]<br />
* [[radius]]</div>Gullevekhttps://amd.co.at/adminwiki/Software_SolutionsSoftware Solutions2006-05-24T02:01:10Z<p>Gullevek: /* monitoring */</p>
<hr />
<div>= solutions in software =<br />
<br />
== backup ==<br />
<br />
* rsync<br />
* bacula <br />
* arkeia (commercial)<br />
<br />
== monitoring ==<br />
<br />
* [[nagios]]<br />
* [[big brother/sister]]<br />
* [[munin]]<br />
* [[smokeping]] <br />
* [[monit]]<br />
* [[HotSaNIC]]<br />
* [[cricket]]<br />
* [[cacti]]<br />
<br />
== migrating servers ==<br />
<br />
* rsync/tar/cp -a <br />
<br />
== AAA ==<br />
<br />
* pam/nss<br />
* ldap<br />
* radius</div>Gullevekhttps://amd.co.at/adminwiki/Software_SolutionsSoftware Solutions2006-05-24T02:00:38Z<p>Gullevek: </p>
<hr />
<div>= solutions in software =<br />
<br />
== backup ==<br />
<br />
* rsync<br />
* bacula <br />
* arkeia (commercial)<br />
<br />
== monitoring ==<br />
<br />
* nagios<br />
* big brother/sister<br />
* munin<br />
* smokeping <br />
* monit<br />
* HotSaNIC<br />
* cricket<br />
* cacti<br />
<br />
== migrating servers ==<br />
<br />
* rsync/tar/cp -a <br />
<br />
== AAA ==<br />
<br />
* pam/nss<br />
* ldap<br />
* radius</div>Gullevekhttps://amd.co.at/adminwiki/SmartySmarty2006-05-24T01:49:12Z<p>Gullevek: </p>
<hr />
<div>= Smarty Template Engine for PHP =<br />
<br />
Smarty is the more or less official template engine for PHP.<br />
http://smarty.php.net/<br />
<br />
== Basics ==<br />
<br />
Smarty is very easy to use and very powerful. It gives you the most esiest way to fully seperate code from html - which you should '''ALWAYS''' do.<br />
<br />
== Installation ==<br />
<br />
* Download Smarty and unpack it<br />
* you need only the "libs" folder.<br />
I recommend you rename and call it something like "Smarty-<version>" and create a symlink to it with just the name "Smarty"<br />
* create the following directories:<br />
cache/<br />
configs/<br />
templates_c/<br />
templates/<br />
<br />
''cache'' is the place where smarty keeps cached pages if the feature is turned on. ''configs'' holds config include files for smarty. ''templates_c'' is the compile directory for smarty. ''templates'' is the directory for holding the templates.<br />
''cache'' and ''templates_c'' need to be writeable by the web server.<br />
* thats it you are done and can start using smarty.<br />
<br />
== Tips and Tricks ==<br />
<br />
=== How to use compile & caching if you have more than one template set. ===<br />
<br />
I have certain projects where I have more than one template set. So in the default setting of smarty I get a caching and compile problem, because of the same template name smarty thinks the page has already been compiled.<br />
To avoid this use the additionl function parameters.<br />
<br />
$smarty->display($template, $cache_id, $compile_id);<br />
$smarty->is_cached(...);<br />
$smarty->clear_cache(...);<br />
<br />
with adding ''$cache_id'' and ''$compile_id'' you can make the template unique in the ''templates_c'' directory. <br />
<br />
I recommend to add page ids, or other unique sets to the ''cache_id'' to make the template unique for the cache. Important if one template has several languages or different content depending on the same id. Remember the cached file will be used whenever ''display'' finds a match.<br />
<br />
For the ''compile_id'' I would add the complete template path. I have subdirectories in the ''templates'' directory, so I add the full template path here. Do not worry about special characters, smarty escapes them.<br />
<br />
== Extensions to Smarty ==<br />
<br />
some extensions to smarty. Can be addition functions, blocks or other extensions.<br />
<br />
=== used gettext for language translation in smarty ===<br />
<br />
to be done by gullevek (perhaps on extra page):<br />
<br />
* smarty extend class code<br />
* t block code<br />
* extra classed needed<br />
* examples<br />
<br />
=== add array [] to the html_checkboxes ===<br />
<br />
if you want to send several checkboxes as an array you can simply add [] to the name. It works in smarty unless you need to have a value inside. So I wrote a small patch for the ''function.html_checkboxes'' file<br />
<br />
'''link to the patch'''<br />
<br />
the patch adds a new element in the ''{html_checkboxes}'' smarty element called ''pos''. The value given is an array which values are used as values inbetween [].<br />
<br />
--[[User:Gullevek|gullevek]] 03:27, 24 May 2006 (CEST)</div>Gullevekhttps://amd.co.at/adminwiki/SmartySmarty2006-05-24T01:27:55Z<p>Gullevek: php smarty template engine</p>
<hr />
<div>= Smarty Template Engine for PHP =<br />
<br />
Smarty is the more or less official template engine for PHP.<br />
http://smarty.php.net/<br />
<br />
== Basics ==<br />
<br />
Smarty is very easy to use and very powerful. It gives you the most esiest way to fully seperate code from html - which you should '''ALWAYS''' do.<br />
<br />
== Installation ==<br />
<br />
* Download Smarty and unpack it<br />
* you need only the "libs" folder.<br />
I recommend you rename and call it something like "Smarty-<version>" and create a symlink to it with just the name "Smarty"<br />
* create the following directories:<br />
cache/<br />
configs/<br />
templates_c/<br />
templates/<br />
<br />
''cache'' is the place where smarty keeps cached pages if the feature is turned on. ''configs'' holds config include files for smarty. ''templates_c'' is the compile directory for smarty. ''templates'' is the directory for holding the templates.<br />
''cache'' and ''templates_c'' need to be writeable by the web server.<br />
* thats it you are done and can start using smarty.<br />
<br />
== Tips and Tricks ==<br />
<br />
=== How to use compile & caching if you have more than one template set. ===<br />
<br />
I have certain projects where I have more than one template set. So in the default setting of smarty I get a caching and compile problem, because of the same template name smarty thinks the page has already been compiled.<br />
To avoid this use the additionl function parameters.<br />
<br />
$smarty->display($template, $cache_id, $compile_id);<br />
$smarty->is_cached(...);<br />
$smarty->clear_cache(...);<br />
<br />
with adding ''$cache_id'' and ''$compile_id'' you can make the template unique in the ''templates_c'' directory. <br />
<br />
I recommend to add page ids, or other unique sets to the ''cache_id'' to make the template unique for the cache. Important if one template has several languages or different content depending on the same id. Remember the cached file will be used whenever ''display'' finds a match.<br />
<br />
For the ''compile_id'' I would add the complete template path. I have subdirectories in the ''templates'' directory, so I add the full template path here. Do not worry about special characters, smarty escapes them.<br />
<br />
--[[User:Gullevek|gullevek]] 03:27, 24 May 2006 (CEST)</div>Gullevekhttps://amd.co.at/adminwiki/Web_DevelopmentWeb Development2006-05-24T01:11:59Z<p>Gullevek: /* PHP */</p>
<hr />
<div>= The choice =<br />
<br />
Although PHP might be your first choice when doing "web development" that doesn't mean it's the best one.<br />
<br />
Food for thought:<br />
<br />
* [http://tnx.nl/php PHP in contrast to perl]<br />
* [http://czth.net/pH/PHPSucks PHPSucks]<br />
* [http://www.ukuug.org/events/linux2002/papers/html/php/ Experiences of using PHP in large websites]<br />
<br />
== Unbiased facts: ==<br />
<br />
* PHPs availability is much better on "foreign" servers.<br />
* PHP is much easier to use than Perl for beginners, because you can just throw HTML in PHP files (or vice versa).<br />
* Perl is much cleaner than PHP.<br />
* Perls webserver integration sucks. Neither CGI, nor mod_perl nor fastcgi give you the ease of use of PHP.<br />
<br />
= PHP =<br />
<br />
* Securing<br />
* Tuning (Zend Optimizer & replacements)<br />
* [[Smarty]]<br />
* PEAR<br />
<br />
= Perl =<br />
* FastCGI vs. mod_perl<br />
* Package Management (dh-make-perl, etc)</div>Gullevekhttps://amd.co.at/adminwiki/BashBash2006-05-24T01:09:17Z<p>Gullevek: </p>
<hr />
<div>= Bash =<br />
<br />
Bash is the most common shell form on linux, and most other unix systems.<br />
<br />
'''Just a small reminder. Before you start writing a long bash script, think if you can do this in perl.'''<br />
<br />
<br />
== Error and Output Redirect ==<br />
<br />
to redirect output and error<br />
ls -l 1>normal_out 2>error_out<br />
<br />
if you want to have both in one file<br />
ls -l 1>normal_out 2>&1<br />
<br />
== Questions and Solutions ==<br />
<br />
Below some examples for bash problems that might come up<br />
<br />
=== Arrays in Bash: ===<br />
<br />
foo[0]=1;<br />
foo[1]=2;<br />
foo[2]=3;<br />
# loop<br />
for (( i=0; i<${#foo[@]}; i++ ));<br />
do<br />
echo ${foo[$i]};<br />
done;<br />
# more like a foreach<br />
for i in ${foo[@]};<br />
do<br />
echo $i;<br />
done;<br />
<br />
=== Variable Variables ===<br />
<br />
foobar=5;<br />
bar="foobar";<br />
echo $foobar;<br />
echo $bar;<br />
echo ${!bar};<br />
<br />
=== Variable Variables in Arrays ===<br />
<br />
foo[0]=1;<br />
foo[1]=2;<br />
foo[2]=3;<br />
foo_tcp[0]="AT";<br />
foo_upd[0]="AU";<br />
foo_tcp[1]="BT";<br />
foo_upd[1]="BU";<br />
foo_tcp[2]="CT";<br />
foo_upd[2]="CU";<br />
# loop<br />
for (( i=0; i<${#foo[@]}; i++ ));<br />
do<br />
echo ${foo[$i]};<br />
for k in upd tcp;<br />
do<br />
data=foo_${k}[$i];<br />
echo ${!data};<br />
done;<br />
done;<br />
<br />
== More Documentation ==<br />
<br />
The best advanced guide for bash scripting: http://www.tldp.org/LDP/abs/html/<br />
<br />
--[[User:Gullevek|gullevek]] 03:09, 24 May 2006 (CEST)</div>Gullevekhttps://amd.co.at/adminwiki/CLICLI2006-05-24T01:08:56Z<p>Gullevek: command line interface examples</p>
<hr />
<div>= CLI =<br />
<br />
The Command Line Interface is the powerway to talk to your system<br />
<br />
<br />
== Problems and Solutions ==<br />
<br />
=== Get the last element from a cut situation ===<br />
<br />
if you have /path/sub/over/unter/filename.txt and you want to get the filename.txt then do this:<br />
echo /path/sub/over/unter/filename.txt | awk -F/ '{ printf("%s\n", $NF)}'<br />
and it will return just filename.txt<br />
<br />
--[[User:Gullevek|gullevek]] 03:08, 24 May 2006 (CEST)</div>Gullevekhttps://amd.co.at/adminwiki/ToolsTools2006-05-24T01:06:08Z<p>Gullevek: </p>
<hr />
<div>= Filesystem =<br />
<br />
* [[rsync]]<br />
<br />
= Networking =<br />
<br />
* [[mtr]]<br />
<br />
= Editors =<br />
<br />
* [[vim]]<br />
* [[emacs]]<br />
<br />
= Scripting =<br />
<br />
* [[bash]]<br />
* [[perl]]<br />
* [[cli]]</div>Gullevekhttps://amd.co.at/adminwiki/BashBash2006-05-24T01:05:46Z<p>Gullevek: /* Questions and Solutions */</p>
<hr />
<div>= Bash =<br />
<br />
Bash is the most common shell form on linux, and most other unix systems.<br />
<br />
'''Just a small reminder. Before you start writing a long bash script, think if you can do this in perl.'''<br />
<br />
<br />
== Error and Output Redirect ==<br />
<br />
to redirect output and error<br />
ls -l 1>normal_out 2>error_out<br />
<br />
if you want to have both in one file<br />
ls -l 1>normal_out 2>&1<br />
<br />
== Questions and Solutions ==<br />
<br />
Below some examples for bash problems that might come up<br />
<br />
=== Arrays in Bash: ===<br />
<br />
foo[0]=1;<br />
foo[1]=2;<br />
foo[2]=3;<br />
# loop<br />
for (( i=0; i<${#foo[@]}; i++ ));<br />
do<br />
echo ${foo[$i]};<br />
done;<br />
# more like a foreach<br />
for i in ${foo[@]};<br />
do<br />
echo $i;<br />
done;<br />
<br />
=== Variable Variables ===<br />
<br />
foobar=5;<br />
bar="foobar";<br />
echo $foobar;<br />
echo $bar;<br />
echo ${!bar};<br />
<br />
=== Variable Variables in Arrays ===<br />
<br />
foo[0]=1;<br />
foo[1]=2;<br />
foo[2]=3;<br />
foo_tcp[0]="AT";<br />
foo_upd[0]="AU";<br />
foo_tcp[1]="BT";<br />
foo_upd[1]="BU";<br />
foo_tcp[2]="CT";<br />
foo_upd[2]="CU";<br />
# loop<br />
for (( i=0; i<${#foo[@]}; i++ ));<br />
do<br />
echo ${foo[$i]};<br />
for k in upd tcp;<br />
do<br />
data=foo_${k}[$i];<br />
echo ${!data};<br />
done;<br />
done;<br />
<br />
== More Documentation ==<br />
<br />
The best advanced guide for bash scripting: http://www.tldp.org/LDP/abs/html/</div>Gullevekhttps://amd.co.at/adminwiki/BashBash2006-05-24T01:04:49Z<p>Gullevek: </p>
<hr />
<div>= Bash =<br />
<br />
Bash is the most common shell form on linux, and most other unix systems.<br />
<br />
'''Just a small reminder. Before you start writing a long bash script, think if you can do this in perl.'''<br />
<br />
<br />
== Error and Output Redirect ==<br />
<br />
to redirect output and error<br />
ls -l 1>normal_out 2>error_out<br />
<br />
if you want to have both in one file<br />
ls -l 1>normal_out 2>&1<br />
<br />
== Questions and Solutions ==<br />
<br />
=== Arrays in Bash: ===<br />
<br />
foo[0]=1;<br />
foo[1]=2;<br />
foo[2]=3;<br />
# loop<br />
for (( i=0; i<${#foo[@]}; i++ ));<br />
do<br />
echo ${foo[$i]};<br />
done;<br />
# more like a foreach<br />
for i in ${foo[@]};<br />
do<br />
echo $i;<br />
done;<br />
<br />
=== Variable Variables ===<br />
<br />
foobar=5;<br />
bar="foobar";<br />
echo $foobar;<br />
echo $bar;<br />
echo ${!bar};<br />
<br />
=== Variable Variables in Arrays ===<br />
<br />
foo[0]=1;<br />
foo[1]=2;<br />
foo[2]=3;<br />
foo_tcp[0]="AT";<br />
foo_upd[0]="AU";<br />
foo_tcp[1]="BT";<br />
foo_upd[1]="BU";<br />
foo_tcp[2]="CT";<br />
foo_upd[2]="CU";<br />
# loop<br />
for (( i=0; i<${#foo[@]}; i++ ));<br />
do<br />
echo ${foo[$i]};<br />
for k in upd tcp;<br />
do<br />
data=foo_${k}[$i];<br />
echo ${!data};<br />
done;<br />
done;<br />
<br />
== More Documentation ==<br />
<br />
The best advanced guide for bash scripting: http://www.tldp.org/LDP/abs/html/</div>Gullevekhttps://amd.co.at/adminwiki/BashBash2006-05-24T01:02:28Z<p>Gullevek: bash scripting tips</p>
<hr />
<div>= Bash =<br />
<br />
Bash is the most common shell form on linux, and most other unix systems.<br />
<br />
'''Just a small reminder. Before you start writing a long bash script, think if you can do this in perl.'''<br />
<br />
== Questions and Solutions ==<br />
<br />
''Arrays in Bash:''<br />
<br />
foo[0]=1;<br />
foo[1]=2;<br />
foo[2]=3;<br />
# loop<br />
for (( i=0; i<${#foo[@]}; i++ ));<br />
do<br />
echo ${foo[$i]};<br />
done;<br />
# more like a foreach<br />
for i in ${foo[@]};<br />
do<br />
echo $i;<br />
done;<br />
<br />
''Variable Variables''<br />
<br />
foobar=5;<br />
bar="foobar";<br />
echo $foobar;<br />
echo $bar;<br />
echo ${!bar};<br />
<br />
''Variable Variables in Arrays''<br />
<br />
foo[0]=1;<br />
foo[1]=2;<br />
foo[2]=3;<br />
foo_tcp[0]="AT";<br />
foo_upd[0]="AU";<br />
foo_tcp[1]="BT";<br />
foo_upd[1]="BU";<br />
foo_tcp[2]="CT";<br />
foo_upd[2]="CU";<br />
# loop<br />
for (( i=0; i<${#foo[@]}; i++ ));<br />
do<br />
echo ${foo[$i]};<br />
for k in upd tcp;<br />
do<br />
data=foo_${k}[$i];<br />
echo ${!data};<br />
done;<br />
done;<br />
<br />
== More Documentation ==<br />
<br />
The best advanced guide for bash scripting: http://www.tldp.org/LDP/abs/html/</div>Gullevekhttps://amd.co.at/adminwiki/ToolsTools2006-05-24T00:41:13Z<p>Gullevek: /* Scripting */</p>
<hr />
<div>= Filesystem =<br />
<br />
* [[rsync]]<br />
<br />
= Networking =<br />
<br />
* [[mtr]]<br />
<br />
= Editors =<br />
<br />
* [[vim]]<br />
* [[emacs]]<br />
<br />
= Scripting =<br />
<br />
* [[bash]]<br />
* [[perl]]</div>Gullevekhttps://amd.co.at/adminwiki/User:GullevekUser:Gullevek2006-05-24T00:39:47Z<p>Gullevek: /* Other */</p>
<hr />
<div>== About Me ==<br />
<br />
Clemens Schwaighofer, human beeing, mostly from earth.<br />
<br />
== Facts ==<br />
<br />
Admin, Coder, IT Pig.<br />
<br />
<br />
== Other ==<br />
<br />
There is nothing else.<br />
<br />
"Freiheit ist immer auch die Freiheit des Andersdenkenden"<br />
- Rosa Luxemburg, 1871 - 1919 <br />
<br />
--[[User:Gullevek|gullevek]] 02:39, 24 May 2006 (CEST)</div>Gullevek