[Check_mk (deutsch)] Linux Agent per Script komplett installieren und am Server anmelden

Hallo,
ich bin dabei die Installation des Linux-Clients und die Anmeldung an check-mk inc. bakery per Script zu automatisieren. Bisher haben wir nur mit sehr statischen System-Images und saltstack gearbeitet um anzupassen.
Ehe ich das Rad komplett neu erfinde die Frage nach Beispielen wie man per shell-script den Agent komplett installiert. In der Doku findet sich einiges zu den Einzelschritten aber halt kein kompletter Durchlauf (oder ich übersehe es).
Mich würde interessieren ob und wie ihr Rechnernamen erzeugt und welche Tags ihr grundsätzlich mitgebt damit die Nachkonfiguration über die Bakery erfolgen kann.

Gruss
Ralf

···

Von meinem iPad gesendet

Hallo Ralf,

Ehe ich das Rad komplett neu erfinde die Frage nach Beispielen wie man per shell-script den Agent komplett installiert. In der Doku findet sich einiges zu den Einzelschritten aber halt kein kompletter Durchlauf (oder ich übersehe es).

Ich habe mal ein Pseudo-Shellscript gebaut, um jeden Schritt aufzulisten:

https://github.com/HeinleinSupport/check_mk/blob/master/helper/deploy_checkmk.sh

Der Hash ($4) ist dabei der Agentenpaket-Hash eines generischen
Agentenpaketes, in dem der Agent-Updater enthalten ist.

In Zeile 46 wird der Host via API angelegt. Hier können natürlich noch
weitere Tags gesetzt werden.

Viele Grüße

···

On 23.01.19 15:08, Ralf Prengel wrote:
--
Robert Sander
Heinlein Support GmbH
Schwedter Str. 8/9b, 10119 Berlin

Tel: 030 / 405051-43
Fax: 030 / 405051-19

Amtsgericht Berlin-Charlottenburg - HRB 93818 B
Geschäftsführer: Peer Heinlein - Sitz: Berlin

Hallo Ralf,

wir machen das hier mit Puppet.
Die VMs werden angelegt und der Name im vCenter vergeben. Im Image wird
dann im ersten Puppet Lauf der Agent installiert und registriert.

Das Puppet File enthält dazu folgendes:
# Definition des Check_MK Agents
class profiles::infrastruktur::check_mk_agent (
$omd_server = hiera('check_mk::agent_bakery_server',
'<omd-server>'),
$omd_site = hiera('check_mk::agent_bakery_site', 'master'),
$omd_user = hiera('check_mk::user', 'tu_automation'),
$omd_user_secret = hiera('check_mk::user_secret'),
$omd_agent_package = hiera('check_mk::agent_package', 'check-mk-agent'),
$omd_agent_version = hiera('check_mk::agent_version',
'xxxxxxxxxxxxx'), # default versions String für Agent
){
$curl_cmd = '/usr/bin/curl --insecure'
$wato_api_url =
"https://${omd_server}/${omd_site}/check_mk/webapi.py"
$wato_user_params = "_username=${omd_user}&_secret=${omd_user_secret}"
$omd_agent_filename = "${omd_agent_package}_${omd_agent_version}_all.deb"

$known_functions = ['foreman', 'puppet', 'admin', 'api', 'app', 'archiv',
'backup',
# weitere tags
'vCenter', 'vmstats', 'vpn', 'vsm',
'web', 'webpagetest', 'wsus', 'www',
'zarafa']
$known_projects = ['agent',
# weitere tags
'telefonie',
'web', 'wiki']

$known_functions_s = join($known_functions, '|')
$known_projects_s = join($known_projects, '|')

# omd_host_tags: 0->funktion, 1->projekt, 2->umgebung
$host_name = downcase($::hostname)
$omd_host_tags = split($host_name, '-')
if $host_name !~ /^.+?-.+?(-.+?)?$/ {
$omd_host_tags[1] = 'unknown'
$omd_host_tags[2] = 'unknown'
}
if $omd_host_tags[0] =~ /^(.+?)\d{,4}$/ {
$omd_host_tags[0] = "#${1}"
}
if $omd_host_tags[0] =~ /^(docker|graphite|icinga|mysql|puppet|report)/ {
$omd_host_tags[0] = "#${1}"
}
if $omd_host_tags[0] !~ /^($known_functions_s)$/ {
$omd_host_tags[0] = 'unknown'
}

if $omd_host_tags[1] =~ /^(.+?)\d{,4}$/ {
$omd_host_tags[1] = "#${1}"
}

if $omd_host_tags[1] !~ /^($known_projects_s)$/ {
$omd_host_tags[1] = 'unknown'
}

#if $omd_host_tags[2] !~ /^(dev|test|prod)$/ {
# $omd_host_tags[2] = 'unknown'
#}
case $::environment {
'dev': { $env = 'dev' }
'test': { $env = 'test' }
'production': { $env = 'prod' }
default: { $env = 'unknown' }
}

case $::osfamily {
'Debian': { $agent_os = 'ht_os_ubuntu' }
'RedHat': { $agent_os = 'ht_os_rhel' }
'Suse': { $agent_os = 'ht_os_sles' }
default: { $agent_os = 'ht_os_unknown' }
}

$wato_api_get_request = "request={\"hostname\": \"${host_name}\"}"
$grep_rc = "/bin/grep -vq '\"result_code\": 0'"
$wato_api_add_request = join(['request={"attributes":{"tag_agent":
"cmk-agent",

"tag_criticality": "', $env, '",

"tag_tg_puppet_mgmt": "ht_puppet_mgmt",
"tag_tg_os": "',
$agent_os, '",
"ipaddress": "',
$::fqdn, '"},
"hostname": "', $host_name, '",
"folder": "/"}'
], '')

$register_params = ["--server ${omd_server} --site ${omd_site}
--protocol https --hostname ${host_name} ",
"--user ${omd_user} --secret ${omd_user_secret}"]
$cmd_act = "${curl_cmd}
'${wato_api_url}?action=activate_changes&${wato_user_params}&allow_foreign_changes=1'"

# Host in WATO anlegen + aktivieren
exec{ 'check_mk-agent-add2wato':
command => "${curl_cmd}
'${wato_api_url}?action=add_host&${wato_user_params}' -d
'${wato_api_add_request}' && ${cmd_act}",
onlyif => "${curl_cmd}
'${wato_api_url}?action=get_host&${wato_user_params}' -d
'${wato_api_get_request}' 2>/dev/null | ${grep_rc}",
}

# firewall input rules
firewall{ '100 allow check_mk agent access':
port => [6556],
proto => tcp,
action => accept,
before => Package['check-mk-agent'],
}

if $::osfamily == 'Debian' {
# install dependent + check_mk agent package
# we use a dpkg installation with local file to prevent issues with
different repo and agent bakery agent versions
package {'xinetd':
ensure => installed,
name => xinetd,
}
file{ ['/opt', '/opt/images']:
ensure => directory,
}
-> file{ "/opt/images/${omd_agent_filename}":
ensure => file,
owner => 'root',
group => 'root',
mode => '0640',
source =>
"puppet:///modules/profiles/infrastruktur/${omd_agent_filename}",
}
# Wegen moeglicher Agenten Updates per check_mk agent bakery kann
hier kein Bezug auf die Paket-Version eingefuegt werden
-> package{ 'check-mk-agent':
ensure => installed,
name => $omd_agent_package,
source => "/opt/images/${omd_agent_filename}",
provider => dpkg,
subscribe => Exec['check_mk-agent-add2wato'],
}
service{ 'xinetd':
ensure => true,
enable => true,
hasrestart => true,
hasstatus => true,
subscribe => Package['xinetd'],
}
# check_mk agent updater configuration + registration
file{ '/etc/check_mk/cmk-update-agent.cfg':
ensure => file,
owner => 'root',
group => 'root',
mode => '0640',
content => template('profiles/check_mk/cmk-update-agent.cfg.erb'),
subscribe => Package['check-mk-agent'],
}
# in profiles/check_mk/cmk-update-agent.cfg.erb liegen die
Certificate für die Registrierung.

$cmd = join\(\[&#39;/usr/bin/cmk\-update\-agent register&#39;,

join($register_params, '')], ' ')
# register, wenn die state-Datei nicht vorhanden ist
exec{ 'check_mk-agent-register':
command => $cmd,
onlyif => '/usr/bin/test ! -f /etc/cmk-update-agent.state',
notify => Exec['check_mk-agent-discover'],
require => File['/etc/check_mk/cmk-update-agent.cfg'],
}
# register, wenn die state-Datei vorhanden ist aber ein voriger
register nicht erfolgreich war
exec{ 'check_mk-agent-register-2':
command => $cmd,
onlyif => ["/bin/grep -q 'not registered'
/etc/cmk-update-agent.state",
'/usr/bin/test -f /etc/cmk-update-agent.state',],
notify => Exec['check_mk-agent-discover'],
require => File['/etc/check_mk/cmk-update-agent.cfg'],
}

\# services discovern \+ aktivieren
exec\{ &#39;check\_mk\-agent\-discover&#39;:
  command     =&gt; &quot;$\{curl\_cmd\}

'${wato_api_url}?action=discover_services&${wato_user_params}&mode=refresh'
-d '${wato_api_get_request}'",
refreshonly => true,
}
exec{ 'check_mk-activate-changes':
command => $cmd_act,
refreshonly => true,
subscribe => Exec['check_mk-agent-discover'],
}
}
}

···

--
Mit freundlichem Gruß / Best regards

Ralf Meißner

Am 23.01.19 um 15:08 schrieb Ralf Prengel:

Hallo,
ich bin dabei die Installation des Linux-Clients und die Anmeldung an check-mk inc. bakery per Script zu automatisieren. Bisher haben wir nur mit sehr statischen System-Images und saltstack gearbeitet um anzupassen.
Ehe ich das Rad komplett neu erfinde die Frage nach Beispielen wie man per shell-script den Agent komplett installiert. In der Doku findet sich einiges zu den Einzelschritten aber halt kein kompletter Durchlauf (oder ich übersehe es).
Mich würde interessieren ob und wie ihr Rechnernamen erzeugt und welche Tags ihr grundsätzlich mitgebt damit die Nachkonfiguration über die Bakery erfolgen kann.

Gruss
Ralf

Von meinem iPad gesendet
_______________________________________________
checkmk-de mailing list
checkmk-de@lists.mathias-kettner.de
Verwaltung & Abmeldung unter
https://lists.mathias-kettner.de/cgi-bin/mailman/listinfo/checkmk-de

Hallo,

ich komme leider erst jetzt dazu zu lesen und zu antworten. Ich hatte dasselbe Problem und habe mir je ein script für powershell und bash dazu geschrieben. Sind beide relativ schmutzig. Z.B. muss bei den Kommandos derzeit das Adminpasswort ohne variable eingetragen werden. Außerdem klappt das so ohne weiteres nur als root mit keybased ssh und Active-Directory Domainadmin. ABer ich denke, es kann vielleicht helfen. Ich hoffe, sie erklären sich ausreichend selbst. Hier der Link:

https://hessenbox.uni-kassel.de/dl/fi7eU8VCw5PUFuZjoGYS9Sq1/cmk_agent_scripts.zip

Beste Grüße,

Maik

···

Am 23.01.2019 um 15:08 schrieb Ralf Prengel:

Hallo,
ich bin dabei die Installation des Linux-Clients und die Anmeldung an check-mk inc. bakery per Script zu automatisieren. Bisher haben wir nur mit sehr statischen System-Images und saltstack gearbeitet um anzupassen.
Ehe ich das Rad komplett neu erfinde die Frage nach Beispielen wie man per shell-script den Agent komplett installiert. In der Doku findet sich einiges zu den Einzelschritten aber halt kein kompletter Durchlauf (oder ich übersehe es).
Mich würde interessieren ob und wie ihr Rechnernamen erzeugt und welche Tags ihr grundsätzlich mitgebt damit die Nachkonfiguration über die Bakery erfolgen kann.

Gruss
Ralf

Von meinem iPad gesendet
_______________________________________________
checkmk-de mailing list
checkmk-de@lists.mathias-kettner.de
Verwaltung & Abmeldung unter
https://lists.mathias-kettner.de/cgi-bin/mailman/listinfo/checkmk-de