Jahr: 2016

XML SOAP Request senden

Wer einen WebService verwendet, muß nicht immer gleich einen eigenen Client entwickeln. Es ist auch möglich SOAP Request mit Tools zu senden. In diesem Beispiel wird ein WebService zum Löschen von Nachrichten angesprochen.

Zu erst erstellen Datei mit dem XML SOAP Request.

vim soap_request.xml

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:removeNachricht xmlns:ns1="http://exposed.storage.service.de/"
<arg0>4860</arg0>
</ns1:removeNachricht>
</soap:Body>
</soap:Envelope>

Mit dem Tool curl senden wir einen HTTP Post Request, als HTTP Header wird die Methode „removeNachricht“ von dem WebService gesendet.

curl -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction: removeNachricht" -d @soap_request.xml -X POST http://localhost:7010/soa-infra/services/StorageService/StorageWebService

Wenn wir eine Liste von Nachrichten löschen wollen, können wir diese Shell Script verwenden. Die NachrichtenID werden in der Datei „list.txt“ gespeichert. Die SOAP Datei wird immer wieder kopiert und in der Datei die ID ersetzt.

#!/bin/sh
URL=http://localhost:7010/soa-infra/services/StorageService/StorageWebService
 
cat list.txt | while read ID
do
 echo "Delete Nachricht: ${ID}"
 cp soap_request.xml.org soap_request.xml
 sed -i s/##NACHRICHT_ID##/${ID}/g soap_request.xml
 curl \
  -H "Content-Type: text/xml; charset=utf-8" \
  -H "SOAPAction: removeNachricht" \
  -d @soap_request.xml -X POST ${URL}
 sleep 2
done

Große Dateien teilen und übertragen

Wenn man eine große Datei über das Internet übertragen will, kann das lange dauern. Eine Unterbrechung der Netzwerkverbindung kann ein Problem dar stellen. Besser ist es, die Datei zu erst zu packen und in kleine Teile zu trennen. Dann kann man diese kleinen Dateien einzeln übertragen und wieder zusammen setzten.

0. 500MB Testdatei erstellen

dd if=/dev/urandom of=myfile.out bs=1M count=500

1. Packen und teilen

gzip -c myfile.out | split -b 20M - myfile.gz_

2. Übertragen

rsync -avzP myfile.gz_* -e ssh user@hostname:/tmp/

3. Zusammensetzen

cat myfile.gz_* | gunzip -c > myfile.out

In Windows kann man die Dateien zusammen kopieren.

copy /b file1 + file2 + file3 + file4 filetogether

Monitoring für das Terminal und Konsole

Heute möchte ich einige nützliche Tools für das Realtime-Monitoring in der Text-Console vorstellen. Die häufisten Fragen sind die Auslastung der CPU, Festplatte und des Netzwerk. Dafür gibt es folgende Tools.

htop – CPU / Auslastung / Prozesse Monitoring
iotop – Input/Output HDD Monitoring
iftop – Netzwerk Monitoring

sudo apt-get install htop iotop iftop

Logrotate

Mit Hilfe von Logrotate werden die Log-Datien aus dem Verzeichnis /var/log/ gepackt.

Im Verzeichnis /etc/cron.daily/logrotate ist ein Script gespeichert, welches Logrotate jeden Tag startet. Die Einstellung für Logrotate liegen in der Konfiguration /etc/logrotate.conf gespeichert.

sudo vim /etc/logrotate.d/dpkg

/var/log/dpkg.log {
  monthly                   # Monatlich
  rotate 12                 # Behalte 12 Stück
  compress                  # Komprimiert
  delaycompress             # Komprimiert nach dem verschieben
  missingok                 # Es ist OK, wenn kein Log da ist.
  notifempty                # Leere Dateien werden nicht verschoben
  create 644 root root      # Rechte ändern
}

Gepackte Logdateien ansehen

Log-Dateien im Verzeichnis /var/log/ werden per Log-Rotate nach einem Tag mit GNU ZIP gepackt. Will man sich den Inhalt ansehen, gibt es praktische Tools.

zless /var/log/syslog.1.gz
zcat /var/log/syslog.1.gz
zgrep "failed" /var/log/syslog.1.gz

NetworkManager entfernen

Wenn man vom NetworkManager zurück zu Network wecheln will, sind drei Schritt aus zu führen.

sudo service NetworkManager stop
sudo service network start
sudo apt-get remove NetworkManager

Erstellen Sie auch die Konfiguration für Network.

sudo vim /etc/network/interfaces

auto lo
iface lo inet loopback
 
auto eth0
iface eth0 inet dhcp

NetworkManager ohne GUI verwalten

Wenn man den NetworkManager (NM) ohne eine GUI verwenden will, kann man das Programm nmcli verwenden.

nmcli device status
nmcli device show eth0
nmcli connection show
nmcli general

Es ist auch möglich die Verbindung zu trennen und zu ändern.

nmcli device [connect/disconnect] eth0

Die Einstellung werden gespeichert im Verzeichnis /etc/NetworkManager/system-connections/.

sudo vim /etc/NetworkManager/system-connections/Kabelnetzwerkverbindung

[connection]
id=Kabelnetzwerkverbindung
uuid=245e5-2e4f-25ef-4c55-56ede3
type=ethernet
permissions=
secondaries=
timestamp=1453713048
 
[ethernet]
duplex=full
mac-address=F0:DE:F1:XX:XX:XX
 
[ipv4]
method=auto
 
[ipv6]
ip6-privacy=0
method=auto

Ubuntu – Systemd Netzwerknamen

Seit der Umstellung auf Systemd haben sich die Namen der Netzwerk-Adapter geändert. Die Schnittstellt hatte früher den Namen „eth0“, „eth1“ und heißt jetzt zum Beispiel „enp0s5“. Der Aufbau der Namen folgt einem Standard.

Der Aufbau ist wie folgt:

Two character prefixes based on the type of interface:
en -- Ethernet
sl -- serial line IP (slip)
wl -- wlan
ww -- wwan
 
Type of names:
 
b<number>                          -- BCMA bus core number
c<bus_id>                          -- CCW bus group name
o<index>[d<dev_port>]              -- on-board device index number
s<slot>[f<function>][d<dev_port>]  -- hotplug slot index number
x<MAC>                             -- MAC address
 
p<bus>s<slot>[f<function>][d<dev_port>]  -- PCI geographical location
p<bus>s<slot>[f<function>][u<port>][..][c<config>][i<interface>]  -- USB port number chain

Das Beispiel „enp0s5“ ist eine Ethernet Karte PCI am Bus 0 Slot 5.

Doch wie kann man diese Namen finden, wenn man eine Karte neu installiert hat?

Der Befehl ifconfig mit der Option -a zeigt all Netzwerk-Geräte an, auch wenn Sie noch nicht konfiguriert sind.

ifconfig -a
lshw -class network

Will man den Namen ändern in „eth0“ so muß mann eine UDev Regel hinzufügen. Ersetzen Sie die MAC Adresse und den Namen mit den Daten aus Ihrem System.

sudo vim /etc/udev/rules.d/10-network.rules

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="02:00:37:6f:ff:ff", KERNEL=="enp0s5", NAME="eth0"

Ändern Sie auch die Netzwerkeinstellungen und führen Sie einen Neustart durch.

sudo vim /etc/network/interfaces

auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address 10.0.0.100
netmask 255.255.255.0
gateway 10.0.0.1

Syslog – Protokollierung in System Log

Wenn man in seinem Script eine Statusmeldung in System-Log schreiben will, geht das mit dem Befehl logger.

logger "Hello World"

Es wird automatisch das Datum, Uhrzeit, Hostname und Benutzer zu dem Text in das System-Log geschrieben.

grep "Hello" /var/log/syslog

Will man den Speicherort ändern, so fügt man eine weitere Zeile in die Konfiguration hinzu.

sudo vim /etc/rsyslog.d/50-default.conf

user.* /var/log/user.log

sudo truncate -s 0 /var/log/user.log
sudo chown syslog:adm /var/log/user.log
sudo service rsyslog restart

Um Logging von unterschiedlichen Server an einem System zu sammeln, muss man die Einstellungen von Rsyslog ändern.

sudo vim /etc/rsyslog.conf

module(load="imudp")
input(type="imudp" port="514")

sudo service rsyslog restart

Jetzt kann man von einem anderen Server eine Nachricht senden.

logger -n 10.0.0.1 "Hello Server!"

Check_MK Plugins erstellen mit Datenbank als Quelle

In diesem Beitrag will ich ein Check_MK Agent Plugin erstellen, welches Daten aus einer Datenbank aus liest und in Check_MK als Service mit Statistik integriert.

1. Installation

1.1. Java installieren

sudo apt-get install openjdk-8-jre

1.2. SQL-Workbench installieren

SQL-Workbench von der Seite laden.

wget http://www.sql-workbench.net/Workbench-Build119.zip

Die ZIP-Datei entpacken.

unzip Workbench-Build119.zip

2. Einrichtung

2.1. SQL-Workbench Profile

Starten Sie SQL-Workbench im Grafikmodus und legen ein Connection Profile an, mit dem Sie eine Verbindung zur Datenbank auf bauen können.

./Workbench-Build119/sqlworkbench.sh

2.2. Verzeichnisse anlegen

mkdir -p ./check-db-plugin/{lib,logs,result}/

Die Bibliothek in das Projektverzeichnis kopieren.

cp ./Workbench-Build119/sqlworkbench.jar ./check-db-plugin/lib/

2.3. Script erstellen

Dieses Script starte SQL-Workbench im Command-Modus und transformiert die Datenbankabfrage in eine OUT-Datei. Als „ProfileName“ verwenden Sie den Namen, welche Sie unter Punk 2.1. erstellt haben.

vim ./check-db-plugin/start.sh
chmod +x vim ./check-db-plugin/start.sh

#!/bin/sh
DIR=/home/user/check-db-plugin/
JAVA_HOME=/usr/lib/jvm/default-java/
JAR=lib/sqlworkbench.jar
CONFIG=/home/user/.sqlworkbench
SCRIPT=count.sql
LOG=logs/check.log
 
cd $DIR
 
$JAVA_HOME/bin/java \
  -jar $JAR \
  -profile='ProfileName' \
  -command='WBInclude count.sql;' \
  -configDir=$CONFIG \
  -logfile=$LOG \
  -readOnly \
  -displayResult=false; \
#  -script=$SCRIPT

In der Datei „count.sql“ erstellen Sie die Abfrage für die Datenbank und die anschließende XSLT Transformation.

vim ./check-db-plugin/count.sql

WbConnect ProfileName;
 
WbExport -type=xml -file='result/table.xml' -stylesheet='count.xslt' -xsltOutput='result/table.out';
SELECT count(*) as SUM, 50 as WARNING, 100 as CRITICAL FROM table WHERE status = 'closed';

Die XSLT Transformation wandelt das Ergebnis der Datenbank in eine einfache Textausgabe um.

vim ./check-db-plugin/count.xslt

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
     version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>
 
<xsl:output
  encoding="iso-8859-15"
  method="text"
  indent="no"
  standalone="no"
  omit-xml-declaration="no"
  doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
/>
 
<xsl:variable name="newline"><xsl:text>&#10;</xsl:text></xsl:variable>
<xsl:variable name="tab"><xsl:text>&#x09;</xsl:text></xsl:variable>
 
<xsl:template match="/">
        <!-- Write the data rows -->
        <xsl:for-each select="/wb-export/data/row-data">
                <xsl:for-each select="column-data">
                        <xsl:value-of select="."/>
                        <xsl:if test="position() &lt; last()"><xsl:value-of select="$tab"/>
                        </xsl:if>
                </xsl:for-each>
                <xsl:value-of select="$newline"/>
        </xsl:for-each>
</xsl:template>
 
</xsl:stylesheet>

3. Check_MK Agent

3.1. Verzeichnis erstellen

Der Check soll nur alle 120 Sekunden asynchron ausgeführt werden, deshalb wird ein Verzeichnis 120 angelegt.

sudo mkdir -p /usr/lib/check_mk_agent/local/120/

3.2. Check erstellen

Der Check liest im Verzeichnis die Dateien mit der Endung /home/user/check-db-plugin/result/*.out aus und stellt das Ergebnis im Check_MK agent bereit.

sudo vim /usr/lib/check_mk_agent/local/120/check-db-plugin.sh
sudo chmod +x /usr/lib/check_mk_agent/local/120/check-db-plugin.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/sh
# Plugin Return Codes
# = 0   OK
# = 1   Warning
# = 2   Critical
# = 3   Unknown
#
DIR=/home/user/check-db-plugin/
FILTER=result/*.out
NAME="SQL-counter"
 
# Start SQL-Workbench into batch mode
$DIR/start.sh > /dev/null
 
 
for file in $DIR/$FILTER; do
 
  filename=$(basename "$file")
  date=$(date -r "$file" +"%Y-%m-%d %H:%M:%S")
 
  count=$(cut -f1 ${file})
  limit_warning=$(cut -f2 ${file})
  limit_critical=$(cut -f3 ${file})
 
  if [ -z $count ] ; then
    status=3
    statustext="UNKNOWN"
  elif [ $count -gt $limit_critical ] ; then
    status=2
    statustext="CRITICAL"
  elif [ $count -gt $limit_warning ] ; then
    status=1
    statustext="WARNING"
  else
    status=0
    statustext="OK"
  fi
 
  if [ $count -eq $limit_warning ] && [ $count -eq $limit_critical ] ; then
    unset limit_warning
    unset limit_critical
  fi
 
  echo "${status:-1} ${NAME}_${filename} count=${count};$limit_warning;$limit_critical; Check(${statustext}): ${count} - ${date}"
 
done
 
exit $status

Quelle: Check_MK
Download: SQL-Workbench Handbuch: Install, Scripting, Export

Copyright © 2025 Weiter.info

Theme von Anders Norén↑ ↑