Ping in SNMP Check einbauen?

Hi Zusammen,

will das Rad nicht neu erfinden …

… aber hat von euch mal einere, eine ping Funktion in einem SNMP check eingebaut?

Hintergrund … ich frage einen WLC controller ab der gibt mir die APs mit allen möglichen Informationen zurück nun würde ich die APs gerne automatisch anpingen sprich automatisch die IP des AP`s und das ganz als perfometer ausgeben.

Gerne auch als Extra Services dann könnte ich die Abfrage Zeiten variieren.

Dank schon mal für eure Ideen.

Hallo Bernd,

manuelle Pings kannst du bei den Aktiven Checks einstellen, das ist kein Problem. Schwerer aber, dass du dies automatisch für alle Services machst, die ein Host liefert.

Der einzige Weg, der mir hier einfällt, ist über die API. Erst die Services abfragen, die Hostnamen aus den Servicenamen extrahieren, und dann ein paar Calls welche die Servicekonfiguration anlegt bzw. Überflüssige löscht. Das kann auch der CMDB Syncer, ist aber bissel mit Kanonen auf Spatzen. Eventuell bietet sich ein kleines Script da an. Oder jemand hat sogar eine bessere Idee. :slight_smile:

2 Likes

so hab mal etwas rumgespielt:

Script: get_services_ap.sh
#!/bin/bash

# NOTE: We recommend all shell users to use the "httpie" examples instead.
#       `curl` should not be used for writing large scripts.
#       This code is provided for debugging purposes only.

HOST_NAME="localhost"
SITE_NAME="test"
PROTO="http" #[http|https]
API_URL="$PROTO://$HOST_NAME/$SITE_NAME/check_mk/api/1.0"

USERNAME="api-user"
PASSWORD="geheim"


curl \
  --get \
  --write-out "\nxxx-status_code=%{http_code}\n" \
  --header "Authorization: Bearer $USERNAME $PASSWORD" \
  --header "Accept: application/json" \
  --data-urlencode 'service_description=AP APX-XXXXXX' \
  "$API_URL/objects/host/wlc-extreme-master/actions/show_service/invoke"

Output war eher ernüchtern:

{"links": [{"domainType": "link", "rel": "self", "href": "http://localhost/infra/check_mk/api/1.0/objects/service/wlc-extreme-master-AP%2520APX-XXXX", "method": "GET", "type": "application/json"}], "domainType": "service", "id": "wlc-extreme-master-AP APX-XXXXX", "title": "Service AP APX-XXXXX", "members": {}, "extensions": {"description": "AP APX-XXXX", "host_name": "wlc-extreme-master", "state_type": 1, "state": 1, "last_check": 1728031556}}
xxx-status_code=200

Ich hatte hier auf den Long_output gehofft :frowning:

nun hab ich nochmal in die SWAGGER geschaut und dies hier gefunden:

Adjacent columns:

service_plugin_output - string - Output of the last check
service_long_plugin_output - string - Long (extra) output of the last check

nur weis ich gerade nicht wie ich das in API Abfrage einbauen kann ???

lG

Benutze am besten: GET domain-types/service/collections/all

Dort kannst du (aus meinem Kopf, ungetestet) Folgendes senden:

query={'op': 'and', 'expr': [{'op': '=', 'left': 'host_name', 'right': 'yourhost},
                        {'op': '~', 'left': 'description', 'right': "WLC Service"}]}
columns = ['service_plugin_output', 'service_long_plugin_output']

In python requests sende ich das als params= und der wandelt das passt um, das JSON muss quasi zum String werden. Auf der Shell keine Ahnung.

Achtung, JSON will doppelte ", die einfachen benutze ich in python, daher die Gewohnheit :frowning:

1 Like

Hi,

könnte man den SNMP check nicht auch so schreiben, dass er piggyback Daten für die WLCs erzeugt, deren Hosts du dann über den Dynamic Configuration Deamon automatisch anlegen lässt ?

1 Like

hört sich auch nach einer Interessanten Idee an … :smiling_face_with_three_hearts:

hast du da einen Check der sowas in der Art schon macht ???
kenne das sonst nur von den Spezial Agent`s wie Proxmox, VM, etc

SNMP kann wohl leider keine piggback Daten direkt erzeugen, d.h. man müsste einen special agent schreiben, der die Daten der APs per SNMP am WLC abholt und diese dann für jeden AP einzeln ausgibt.
Daraus kannst du dann die Hosts automatisch erstellen lassen.

1 Like

Ich denke es braucht nicht mal einen Special agent, ein simples script
per Individual program call instead of agent access welches piggyback sectionen pro AP erzeugt und eine DCD connection, die die dann in einem Folder anlegt auf dem ein active ping check configuriert ist reicht.

Ich nehme da gelegentlich einfach ein bash script mit einem curl mit --netrc für die credentials eines read-only accounts, und timeout und connect timeout von ca 5 Sekunden um Daten zu beschaffen.

Das dann per Poperties of host > Monitoring agents > Checkmk agent / API integrations zusätzlich zum SNMP am WLC aktivieren, oder an einen extra piggyback source dummy host hängen.

Das Individual program call instead of agent access script muss dann eine AP liste
per API, snmp oder was auch immer besorgen und darüber iterieren.

Ich habe aber festgestellt, das eine leere piggyback host section nicht
ausreicht, daher gebe ich einfach eine label section mit aus hier dcd:true

loop über alle piggyback hosts und darin

cat<<EOT
<<<<${name}>>>>
<<<labels:sep(0)>>>
{"dcd":"true"}
<<<<>>>>
EOT

2 Likes

Hört sich auch nicht schlecht an …
hast du für das Bash Script evtl. sowas wie ein Template ?

lG

Ungetestet, aber so in diese Richtung

OMD[mysite]:~$ cat local/bin/piggyback-producer.sh 
#!/usr/bin/env bash

# first parameter $1 is $HOSTNAME$ passed by checkmk
# $1 is the hostname of the API that gives us a list of piggyback hosts

apihost=$1

# one always OK service for myself
cat <<EOT
<<<local:sep(0)>>>
0 "health" - healthy 
EOT

# get the data of the piggyback hosts
# login credentials are in ~/.netrc
curl \
  --silent \
  --netrc \
  --connect-timeout 5 \
  --max-time 10 \
  "https://${apihost}:443/rest/api/v1/getalldevices?filter=prod&another=param" |
  jq -r '.results[].hostname' |
  while read host; do
cat <<EOT
<<<<${host}>>>>
<<<labels:sep(0)>>>
{"dcd":"true"}
<<<<>>>>
EOT

done
1 Like

nur mal als Zwischenmeldung bin noch nicht weiter zum testen gekommen :wink: