Sie sind auf Seite 1von 33

Wir unternehmen IT.

Monitoring von SAP mit


check_sap_health
Gerhard Lauer
ConSol* Software GmbH
Monitoring-
Workshop 2014
Seite
Warum ein weiteres/neues SAP-Plugin?
Weil
ich meine Plugins kontinuierlich weiterentwickeln/vereinheitlichen will
und deshalb Perl fr mich besser ist als C. (GLPlugin.pm)
ich Anforderungen schnell umsetzen will und das mit einer
Scriptingsprache schneller geht als mit Compiliererei.
sich die Plugin im Plugin-Methode bewhrt hat. (--mode my-zeugs)
ich Performancedaten will.
17.05.2014 www.consol.de 2
Seite
Warum ein weiteres/neues SAP-Plugin?
Weil
das uralte check_sap bei einem Kunden gecoredumpt hat.
(_nicht_ das Netways-Plugin. Das ist saubere Arbeit, aber leider C)
/etc/sapmon/{agent,login,moni_tr}.cfg Gefrickel ist. (Und auerdem
nicht zu gekapselten OMD-Sites passt)
Anforderungen in Richtung End2End/Businesslogik nicht zu einem
starr kompilierten Plugin passen. (viel zu kundenspezifisch)
CCMS nur ein Teilaspekt ist und ich mit BAPI-Monitoring Neuland fr
Nagios erobern will. (Betriebswirtschaftliche Sicht)
das Plugin auch auf Windows laufen soll.
jemand fr die Entwicklung bezahlt hat.
17.05.2014 www.consol.de 3
Seite
Runterladen, bauen, installieren
$ git clone http://github.com/lausser/check_sap_health
$ cd check_sap_health
$ autoreconf
$ ./configure
$ make
$ cp plugins-scripts/check_sap_health \
$OMD_ROOT/local/lib/nagios/plugins
17.05.2014 www.consol.de 4
Seite
Perl-Modul sapnwrfc
$ cd /tmp
$ SAPCAR -xf NWRFC_20-20004565-Linux-x86_64.SAR
--> erzeugt /tmp/nwrfcsdk
$ perl -MCPAN -e "install sapnwrfc"

No libsapnwrfc installation found, usually in /usr/sap/nwrfcsdk
Which libsapnwrfc build path do you want to link against? /tmp/nwrfcsdk
$ cp libicudata.so.34 libicudecnumber.so libicui18n.so.34 libicuuc.so.34 \
libsapnwrfc.so libsapucum.so $OMD_ROOT/local/lib
17.05.2014 www.consol.de 5
Seite
Berechtigungen fr den Monitoring-User
17.05.2014 www.consol.de 6
Seite
Klopf, Klopf
17.05.2014 www.consol.de 7
$ check_sap_health \
--ashost 172.24.0.195 \
--sysnr 42 \
--username NAGIOS \
--password soigan \
--mode connection-time
OK - 0.06 seconds to connect as NAGIOS@NPL|'connection_time'=0.06;1;5;;
$ check_sap_health \
--ashost 172.24.0.195 \
--sysnr 42 \
--username NAGIOS \
--password soigan \
--mode connection-time
--warning 0.05 \
--critical 1
WARNING - 0.07 seconds to connect as NAGIOS@NPL |
'connection_time'=0.07;0.05;1;;
Seite
Klopf, Klopf keiner daheim
17.05.2014 www.consol.de 8
$ check_sap_health \
--ashost 172.24.0.195 \
--sysnr 42 \
--username NAGIOS \
--password soigan \
--mode connection-time
CRITICAL - cannot create rfc connection: RFC connection open failed: 1 /
RFC_COMMUNICATION_FAILURE /
LOCATION CPIC (TCP/IP) on local host with Unicode
ERROR partner '172.24.0.195:3342' not reached
TIME Tue May 13 13:22:30 2014
RELEASE 720
COMPONENT NI (network interface)
VERSION 40
RC -10
MODULE nixxi.cpp
LINE 3285
DETAIL NiPConnect2: 172.24.0.195:3342
SYSTEM CALL connect
ERRNO 111
ERRNO TEXT Connection refused
COUNTER 1
Seite
Klopf, Klopf keiner daheim - Aufrumen
17.05.2014 www.consol.de 9
$ check_sap_health \
--ashost 172.24.0.195 \
--sysnr 42 \
--username NAGIOS \
--password soigan \
--mode connection-time
CRITICAL - cannot create rfc connection: RFC connection open failed: 1 /
RFC_COMMUNICATION_FAILURE /
$ ls /tmp
rfc03337_2240837376.trc rfc11683_456742656.trc rfc03384_3936470784.trc
rfc15772_808535808.trc rfc03386_4080981760.trc rfc15774_2616141568.trc

hinterlsst /tmp/dev_rfc.trc (wchst und wchst) oder rfc<pid>.trc (mllt


$RFC_TRACE_DIR zu)
check_sap_health lscht selbstndig Files, die lter als 5 Minuten sind.
Seite
CCMS-Baum auflisten zuerst die Monitor Sets
17.05.2014 www.consol.de 10
$ check_sap_health --mode list-ccms-monitor-sets
FlowLogicAccess
Klaus
SAP (CEN) B2B Procurement - Monitors
SAP (CEN) EBP Procurement Internal Monitors
SAP (CEN) EnterpriseBuyer Monitors
SAP APO Monitor
SAP BI Monitors
SAP Business Communication
SAP Business Workflow
SAP CCMS Admin Workplace
SAP CCMS Monitor Templates
SAP CCMS Monitors for Optional Components
SAP CCMS Technical Expert Monitors
SAP CCMS Technical Operations Templates
SAP CCMS Web Admin Monitor Templates
SAP CRM Monitor Templates
SAP CRM Monitor Templates for Release 6.20
SAP E-Sourcing Monitor Template
SAP EM Monitor Templates
SAP ERP Monitor Templates
SAP EWM Monitor Templates
SAP GBT Monitor Templates
SAP GDS Monitor Set
SAP GRC Global Trade Services Monitors
SAP IW - Monitors
SAP J2EE Monitor Templates
SAP LPO Lean Production and Operations Monitor Templates
SAP Mobile Infrastructure Monitor Templates
SAP NetWeaver Enterprise Search Monitor Templates
SAP OperatorWorkplace
SAP Portfolio and Project Management Monitor Templates
SAP Process Monitoring Infrastructure
SAP RRR Monitor
SAP SCM Basis Monitor Templates
SAP SCM Monitor Templates
SAP SNC Monitor Templates
Seite
CCMS-Baum auflisten dann die Monitore
17.05.2014 www.consol.de 11
$ check_sap_health --mode list-ccms-monitors \
--name "SAP CCMS Monitor Templates"
SAP CCMS Monitor Templates
Availability and Performance Overview
Background Processing
Buffers
Change & Transport System
Communications
Data Archiving
Database
Dialog Overview
Dialog per Application Server
Enqueue
Entire System
Exchange Infrastructure
Filesystems
J2EE Applications
J2EE Engine
Operating System
Performance Overview
Remote Databases
Security
Spool System
Syslog
System Configuration
System Errors
VM Container
Workload Collector
liveCache
OK - have fun
Seite
CCMS-Baum auflisten dann die MTEs
17.05.2014 www.consol.de 12
MT_CLASS_PERFORMANCE
$ check_sap_health --mode list-ccms-mtes --name "SAP CCMS Monitor
Templates" --name2 "Enqueue"
NPL\Enqueue\Enqueue 50
NPL\Enqueue\Enqueue Server\ 70
NPL\Enqueue\Enqueue Server\Backup Requests 100
NPL\Enqueue\Enqueue Server\CleanUp Requests 100

NPL\Enqueue\Enqueue Server\Enqueue Requests 100


NPL\Enqueue\Enqueue Server\Granule Arguments 111
NPL\Enqueue\Enqueue Server\Granule Arguments Actual Utilisation 100
NPL\Enqueue\Enqueue Server\Granule Arguments Peak Utilisation 111
NPL\Enqueue\Enqueue Server\Granule Entries 111

NPL\Enqueue\Enqueue Server\Owner Names Actual Utilisation 100


NPL\Enqueue\Enqueue Server\Owner Names Peak Utilisation 111
NPL\Enqueue\Enqueue Server\Recent Lock Time (per minute) 100
NPL\Enqueue\Enqueue Server\Recent Lock Wait Time (per minute) 100
NPL\Enqueue\Enqueue Server\Recent Server Time (per minute) 100

NPL\Enqueue\Enqueue Server\Runtime of Data Collector 100


NPL\Enqueue\Enqueue Server\Total Lock Time 111
NPL\Enqueue\Enqueue Server\Total Lock Wait Time 111
NPL\Enqueue\Enqueue Server\Update Queue Peak 111
NPL\nplhost_NPL_42\EnqueueClient\ 70

NPL\nplhost_NPL_42\EnqueueServer\Utilisation Granule Arguments 100


NPL\nplhost_NPL_42\EnqueueServer\Utilisation Granule Entries 100
NPL\nplhost_NPL_42\EnqueueServer\Utilisation Owner Names 100
\Connection to Standalone Enqueue 199
\Enqueue 199
\Enqueue Clients 199
OK
100 = MT_CLASS_PERFORMANCE
111 = MT_CLASS_SHORTTEXT
Seite
CCMS-MTE herausgreifen
17.05.2014 www.consol.de 13
MT_CLASS_PERFORMANCE
$ check_sap_health --mode ccms-mte-check \
--name "SAP CCMS Monitor Templates" \
--name2 "Enqueue" \
--name3 "NPL\Enqueue\Enqueue Server\Total Lock Time"
OK - Total Lock Time = 0.188 s | 'Enqueue Server_Total Lock Time'=0.18s;;;;
Seite
Nochmal, aber ohne hssliche Backslashes
17.05.2014 www.consol.de 14
MT_CLASS_PERFORMANCE
$ check_sap_health --mode ccms-mte-check \
--name "SAP CCMS Monitor Templates" \
--name2 "Enqueue" \
--name3 "NPL#Enqueue#Enqueue Server#Total Lock Time" \
--separator "#"
OK - Total Lock Time = 0.188 s | 'Enqueue Server_Total Lock Time'=0.18s;;;;
Seite
Mit regulren Ausdrcken
17.05.2014 www.consol.de 15
$ check_sap_health --mode ccms-mte-check \
--name "SAP CCMS Monitor Templates" \
--name2 "Enqueue" \
--name3 "Lock Time" --regexp
OK - Enqueue Server Recent Lock Time (per minute) = 0s, Total Lock Time = 0.195 s | 'Enqueue Server_Recent
Lock Time (per minute)'=0s;0:;0:;; 'Enqueue Server_Total Lock Time'=0.20s;;;;
$ check_sap_health --mode ccms-mte-check \
--name "SAP CCMS Monitor Templates" \
--name2 "Enqueue" \
--name3 "Lock.*Time" --regexp
OK - Enqueue Server Recent Lock Time (per minute) = 0s, Enqueue Server Recent Lock Wait Time (per minute)
= 0s, Total Lock Time = 0.195 s, Total Lock Wait Time = 0.031 s | 'Enqueue Server_Recent Lock Time (per
minute)'=0s;0:;0:;; 'Enqueue Server_Recent Lock Wait Time (per minute)'=0s;0:;0:;; 'Enqueue Server_Total
Lock Time'=0.20s;;;; 'Enqueue Server_Total Lock Wait Time'=0.03s;;;;
Seite
CCMS auslesen
17.05.2014 www.consol.de 16
$ check_sap_health --mode ccms-mte-check \
--name "SAP CCMS Monitor Templates" \
--name2 "Dialog Overview"
OK - Dialog FrontEndNetTime = 0msec, Dialog ResponseTime = 380msec,
Dialog ResponseTime(StandardTran.) = 13msec, Dialog UsersLoggedIn = 2
| 'Dialog_FrontEndNetTime'=0ms;2000;3000;;
'Dialog_ResponseTime'=380ms;2000;3000;;
'Dialog_ResponseTime(StandardTran.)'=13ms;1500;2500;;
'Dialog_UsersLoggedIn'=2;500;750;;
Seite
CCMS auslesen mit mehrzeiligem Output
17.05.2014 www.consol.de 17
$ check_sap_health --mode ccms-mte-check \
--name "SAP CCMS Monitor Templates" \
--name2 "Dialog Overview" \
--multiline
OK - Dialog FrontEndNetTime = 0msec
Dialog ResponseTime = 297msec
Dialog ResponseTime(StandardTran.) = 13msec
Dialog UsersLoggedIn = 2 | 'Dialog_FrontEndNetTime'=0ms;2000;3000;;
'Dialog_ResponseTime'=297ms;2000;3000;;
'Dialog_ResponseTime(StandardTran.)'=13ms;1500;2500;;
'Dialog_UsersLoggedIn'=2;500;750;;
Seite
CCMS auslesen
17.05.2014 www.consol.de 18
$ check_sap_health --mode ccms-mte-check \
--name "SAP CCMS Monitor Templates" \
--name2 "Enqueue" \
--name3 "(Enqueue Request Errors)|(Enqueue Request Rejects)" \
--regexp --multiline
OK - Enqueue Server Enqueue Request Errors = 0/sec
Enqueue Server Enqueue Request Rejects = 0/sec | 'Enqueue
Server_Enqueue Request Errors'=0;0:;0:;; 'Enqueue Server_Enqueue
Request Rejects'=0;0:;0:;;
Seite
CCMS am Solution Manager auslesen
17.05.2014 www.consol.de 19
Im Solution Manager beinhalten die MTE-Namen zustzlich die SID der
angeschlossenen Systeme
$ check_sap_health --mode ccms-mte-check \
--name "SAP CCMS Monitor Templates" \
--name2 "Enqueue" \
--name3 "\$_SERVICESID$\.*\(Enqueue Request Errors)|(Enqu." \
--regexp --multiline
OK - Enqueue Server Enqueue Request Errors = 0/sec
Enqueue Server Enqueue Request Rejects = 0/sec | 'Enqueue
Server_Enqueue Request Errors'=0;0:;0:;; 'Enqueue Server_Enqueue
Request Rejects'=0;0:;0:;;
Seite
CCMS Beispiele
17.05.2014 www.consol.de 20
define service {
service_description app_sap_NPL_default_check_datafile_offline
host_name WAWIS12
use generic-service
check_command check_sap_health_ccms!60!\
$HOSTADDRESS$!42!001!NAGIOS!soigan!\
SAP CCMS Monitor Templates!Database!#Database file offline
}
define service {
service_description app_sap_NPL_default_check_tablespace_usage
host_name WAWIS12
use generic-service
check_command check_sap_health_ccms!60!\
$HOSTADDRESS$!42!001!NAGIOS!soigan!\
SAP CCMS Monitor Templates!Database!#Used space
}
define service {
service_description app_sap_NPL_default_check_last_backup
host_name WAWIS12
use generic-service
check_command check_sap_health_ccms!60!\
$HOSTADDRESS$!42!001!NAGIOS!soigan!\
SAP CCMS Monitor Templates!Database!#Last succ. complete database
backup
}
define service {
service_description app_sap_NPL_default_check_last_log_backup
host_name WAWIS12
use generic-service
check_command check_sap_health_ccms!60!\
$HOSTADDRESS$!42!001!NAGIOS!soigan!\
SAP CCMS Monitor Templates!Database!#Archiving#Last succ. archive
log backup
}
define service {
service_description app_sap_NPL_default_check_spool_used
host_name WAWIS12
use generic-service
check_command check_sap_health_ccms!60!\
$HOSTADDRESS$!42!001!NAGIOS!soigan!\
SAP CCMS Monitor Templates!Spool
System!#Spool#SpoolNumbers#UsedNumbers
}
define service {
service_description app_sap_NPL_default_check_connect
host_name WAWIS12
use generic-service,srv-pnp
check_command check_sap_health!60!\
$HOSTADDRESS$!42!001!NAGIOS!soigan!\
connection-time!--warning 10 --critical 20
}
define servicedependency {
name dependency_app_sap_NPL_default_check_connect
host_name WAWIS12
service_description app_sap_NPL_default_check_connect
execution_failure_criteria u,c
notification_failure_criteria u,c
dependent_service_description \
app_sap_NPL_default_check_datafile_offline,\
app_sap_NPL_default_check_tablespace_usage,\
app_sap_NPL_default_check_last_backup,\
app_sap_NPL_default_check_last_log_backup,\
app_sap_NPL_default_check_spool_used,\
!app_sap_NPL_default_check_connect
}

Last Optimizer Run, Enqueue system, Shortdumps, Caches, Response


Times, Optimizer Statistics, Deadlocks, Memory Management,
R3Rollpaging, Aborted Jobs, uvm.
Seite
CCMS ist nicht alles
SAP-Admins benutzen Solution Manager (d.h. CCMS mit Bordmitteln).
SAP-Admins sind gutmtig und haben kein Problem mit Nagios-Usern.
Nagios-Notification ist praktisch fr Umbrella-Monitoring.
In SAP-Systemen stecken teure Anpassungen, core business critical
enterprise key customer blablubb. Monitoring als Qualittssicherung.
Fremdsysteme kommunizieren mit SAP (RFC-enabled functions).
Verfgbarkeit der Schnittstellen (und Antwortzeiten) .
In SAP steckt viel Business-Logik. Der Zugriff von Aussen (Nagios) ist
kein Hexenwerk.
Strungen im Materialfluss/Bestellwesen/Anlieferung/ erregen mehr
Aufmerksamkeit als schlechte Dialog-Response-Zeiten.
17.05.2014 www.consol.de 21
Seite
Erweiterungen schreiben
17.05.2014 www.consol.de 22
$OMD_ROOT/etc/check_sap_health/CheckSapHealthTest.pm
package MyTest;
our @ISA = qw(Classes::SAP);
use Time::HiRes;
sub init {
my $self = shift;
my $bapi_tic = Time::HiRes::time();
if ($self->mode =~ /my::test::rfcping/) {
my $ping = $self->session->function_lookup("RFC_PING");
my $fc = $ping->create_function_call;
my $frc = $fc->invoke();
$self->add_ok("pong");
# $fc kann jetzt weiter ausgewertet werden
}
my $bapi_tac = Time::HiRes::time();
my $bapi_duration = $bapi_tac - $bapi_tic;
$self->set_thresholds(warning => 5, critical => 10);
$self->add_message($self->check_thresholds($bapi_duration),
sprintf "runtime was %.2fs", $bapi_duration);
$self->add_perfdata(
label => 'runtime',
value => $bapi_duration,
);
}
Seite
Erweiterungen schreiben einfacher Demo-Ping
17.05.2014 www.consol.de 23
package MyTest;

sub init {

if ($self->mode =~ /my::test::rfcping/) {
$ check_sap_health \
--with-mymodules-dyn-dir $USER4/check_sap_health \
--mode my-test-rfcping
OK - pong, runtime was 0.02s | 'runtime'=0.02;5;10;;
MyTest
my::test::rfcping
my-test-rfcping
Seite
API fr selbstgeschriebene Erweiterungen
Man braucht
sub init { my $self = shift;
$self->mode ist der Kommandozeilenparameter --mode in der internen
Reprsentation. (Doppeldoppelpunkt statt Bindestrich)
$self->opts->para ist der Wert des Kommandozeilenparameter para
$self->session ist das Handle fr die RFC-Verbindung
$self->add_ok(text), $self->add_warning(text),
$self->set_thresholds(warning => defwarn, critical => defcrit)
$self->check_thresholds(value)
$self->add_perfdata(label => label, value => value, [uom => uom])
17.05.2014 www.consol.de 24
Seite
Beispiel 2: BAPI_BUPA_CENTRAL_GETLIST
17.05.2014 www.consol.de 25
$ check_sap_health --with-mymodules-dyn-dir $USER4/etc/check_sap_health\
--mode my-bapi-bpgetlist --name A000000001
OK - BAPI_BUPA_CENTRAL_GETDETAIL is OK, found partner ConSol* Software
GmbH, runtime was 0.14s | 'runtime'=0.14;5;10;;
Seite
BAPI-Schnittstellendefinition
17.05.2014 www.consol.de 26
In der Transaktion SE37
kann man nach
Funktionen suchen und
ihre Aufruf- bzw.
Rckgabeschnittstelle
anschauen.
Seite 17.05.2014 www.consol.de 27
etc/check_sap_health/CheckSapHealthBapi.pm
package MyBapi;
our @ISA = qw(Classes::SAP);
use Time::HiRes;
sub init {
my $self = shift;
my $bapi_tic = Time::HiRes::time();
if ($self->mode eq "my::bapi::bpgetlist") {
eval {
my $fl = \
$self->session->function_lookup("BAPI_BUPA_CENTRAL_GETLIST");
my $fc = $fl->create_function_call;
$fc->BUSINESSPARTNER($self->opts->name); # A000000001
$fc->VALIDFROM("01010001");
$fc->VALIDTO("31129999");
$fc->invoke;
my @rows = @{$fc->RETURN};
if (scalar(@rows) == 0) {
# leere Tabelle RETURN ist OK
$self->add_ok("BAPI_BUPA_CENTRAL_GETDETAIL is OK");
$fc->CENTRALDATAORGANIZATION->[0]->{NAME1} \
=~ s/\s+$//;
$self->add_ok(sprintf "found partner %s",
$fc->CENTRALDATAORGANIZATION->[0]->{NAME1});
} elsif (scalar(@rows) == 1) {
if ($rows[0]->{TYPE} =~ /^(E|A)/) {
$self->add_unknown($rows[0]->{MESSAGE});
} else {
$self->add_ok("BAPI_BUPA_CENTRAL_GETDETAIL is OK");
}
} else {
foreach my $row (@rows) {
$errors++ if $row->{TYPE} =~ /^(E|A)/ \
&& $rownum > 0;
$rownum++;
}
$self->add_message($errors ? 2 : 0,
sprintf "BAPI_BUPA_CENTRAL_GETDETAIL returned %d
errors (in %d rows)",
$errors, $rownum);
}
};
if ($@) {
$self->add_unknown($@);
}
} elsif ($self->mode =~ /my::bapi::weiterefunktionen/) {
} else {
$self->add_unknown("unknown mode");
}
my $bapi_tac = Time::HiRes::time();
my $bapi_duration = $bapi_tac - $bapi_tic;
$self->set_thresholds(warning => 5, critical => 10);
$self->add_message($self->check_thresholds($bapi_duration),
sprintf "runtime was %.2fs", $bapi_duration);
$self->add_perfdata(
label => 'runtime',
value => $bapi_duration,
);
}
Seite
Job- und SLA-Monitoring
End-of-Day-Jobs und insbes. nchtliche Batches (bei Banken blich)
werden in Tabellen in SAP protokolliert, incl. Startzeit, Endezeit, Status.
Mit check_sap_health kann man berwachen, ob Jobs erfolgreich und
innerhalb eines SLA-Fensters abgeschlossen wurden.
(Oder man verwendet check_sap_health, um solche Daten aus SAP zu
holen und in eine generische Job-Tabelle zu schreiben)
Bsp.: Job muss um 07:45 fertig sein, ab 10 Min. Versptung gibts rger.
check_sap_health --mode my-eod-sla \
--name FI_LOAN_CALC \
--name2 07:45 \
--warning 0 --critical 600
17.05.2014 www.consol.de 28
Seite
Tabellen auslesen, z.B. SNAP
Fehlerzustnde, sog. Shortdumps, werden in SAP protokolliert.
In der Transaktion ST22 kann man routinemig nachsehen.
17.05.2014 www.consol.de 29
Seite
Tabellen auslesen, z.B. SNAP
Intern stehen die Shortdumps in der Tabelle SNAP.
Mit RFC kann man die Tabelle auslesen und prfen, ob seit dem letzten
Lauf des Plugins neue Dumps hinzugekommen sind.
$ check_sap_health \
--with-mymodules-dyn-dir $OMD_ROOT/etc/check_sap_health \
--mode my-snap-dumps-check
OK - no new shortdumps
$
$ check_sap_health \
--with-mymodules-dyn-dir $OMD_ROOT/etc/check_sap_health \
--mode my-snap-dumps-check
CRITICAL - 2 new shortdumps appeared between 20140509 171649 and
20140513 164249
17.05.2014 www.consol.de 30
Seite
Praxiseinsatz
Handelskonzern, >20 weltweite Standorte, berwiegend CCMS-
Monitoring, Businesslogik folgt in einem spteren Projektstadium.
Eine der grssten sdeutschen Kommunen.
**Bank, von mehreren Standorten in aller Welt werden die Laufzeiten von
geschftskritischen BAPIs gemessen. Vor Ort stehen Windows7-PCs (in
erster Linie fr Sakuli-Tests), per NSClient++ wird check_sap_health.exe
aufgerufen.
Weltbekannter Leuchtmittelhersteller.
17.05.2014 www.consol.de 31
Seite
Ausblick
Generischer Modus fr DB-Optimizer (Oracle, Maxdb..).
Implementierung von best-practice SAP-Basis-Routine-Prfungen .
MTE-bergreifende Performancemessungen und Lsungsvorschlge.
Aber: nur dann, wenn jemand die Entwicklung bezahlt. Ich helfe gerne bei der Analyse und der Implementierung des Applikations/Business-Monitorings, allerdings
nur bei einer formellen, sprich bezahlten Beauftragung. Mails mit dem Inhalt Super Tool. Wir mchten..kannst du mal. oder gar unser Kunde
mchtekannst du mal werde ich vermutlich nicht beantworten. Open Source bedeutet nicht gratis Consulting.
17.05.2014 www.consol.de 32
Kleingedrucktes
Seite 33 17.05.2014 www.consol.de
ConSol* Software GmbH
Franziskanerstrae 38
D-81669 Mnchen
Tel: +49-89-45841-100
Fax: +49-89-45841-111
gerhard.lausser@consol.de
www.consol.de