W jaki sposób działa SolarWinds Agent w systemie Linux/Unix?

System SolarWinds posiada dwie metody monitorowania systemów operacyjnych Linux/Unix

  • Bezagentowo, poprzez protokoły SNMP oraz SSH,

  • Agentowo, poprzez dedykowane oprogramowanie SolarWinds.

 

Monitorowanie SNMP oraz SSH jest używane wg uniwersalnych standardów.

Jednak, w jaki sposób SolarWinds monitoruje serwery poprzez Agent?

Poniżej możemy zobaczyć jak wygląda instalacja agenta z perspektywy systemu operacyjnego CentOS (Linux):

Nov 18 19:21:49 centos7 systemd: Starting SolarWinds Agent Service…
Nov 18 19:21:49 centos7 journal: SolarWinds Agent[28777]: SolarWinds Agent [1.8.0.551] Upgrade – deleting file [/opt/SolarWinds/Agent/bin/swiagent.upgrade]
Nov 18 19:21:49 centos7 systemd: Started SolarWinds Agent Service.
Nov 18 19:21:49 centos7 journal: SolarWinds Agent[28777]: SolarWinds Agent [1.8.0.551] Upgrade – deleting file [/opt/SolarWinds/Agent/bin/swiagent.upgrade]
Nov 18 19:21:51 centos7 journal: SolarWinds Agent[28777]: SolarWinds Agent (provisioning) [1.8.0.551] was started, built with OpenSSL version [OpenSSL 1.0.2k-fips 26 Jan 2017]

Jak widać w zdarzeniach, Agent jest rejestrowany jako usługa, a jego pliki instalacyjne zostały automatycznie skasowane.

W logach odnośnie bezpieczeństwa, możemy także zobaczyć jak instalator tworzy nowego użytkownika w systemie, który będzie używany do uruchamiania usług:

[root@centos7 log]# cat secure | grep swiagent
Nov 18 19:21:47 centos7 groupadd[28641]: group added to /etc/group: name=swiagent, GID=992
Nov 18 19:21:47 centos7 groupadd[28641]: group added to /etc/gshadow: name=swiagent
Nov 18 19:21:47 centos7 groupadd[28641]: new group: name=swiagent, GID=992
Nov 18 19:21:47 centos7 useradd[28646]: new user: name=swiagent, UID=995, GID=992, home=/opt/SolarWinds/Agent, shell=/sbin/nologin
[root@centos7 log]# pwd
/var/log
[root@centos7 log]#

[root@centos7 home]# cat /etc/passwd | grep SolarWinds
swiagent:x:995:992::/opt/SolarWinds/Agent:/sbin/nologin
[root@centos7 home]#

Po zainstalowaniu, możemy od razu zauważyć działający proces agenta w tle:

[root@centos7 bin]# ps xua | grep swiagent
swiagent 28777 0.3 1.9 1735676 19588 ? Ssl 19:21 0:03 /opt/SolarWinds/Agent/bin/swiagent /detach pidfile=/opt/SolarWinds/Agent/bin/swiagentd.pid
swiagent 28850 0.3 1.3 1018416 14024 ? Sl 19:22 0:02 /opt/SolarWinds/Agent/bin/Plugins/JobEngine/SolarWinds.Agent.JobEngine.Plugin ep=EWA4dd90f6d01924b579d7421f27782eb49 id=63c91981-0837-42d3-955a-dcc687f4bd8c.EWWP ipc=ipc_mq_v1
root 29695 0.0 0.1 119924 1172 pts/2 S+ 19:37 0:00 grep –color=auto swiagent
[root@centos7 bin]#

Przy prawidłowej instalacji agenta, połączenie sieciowe do głównego serwera monitorowania także powinno być widoczne:

[root@centos7 log]# netstat –inet -n | grep 192.168.1.39
tcp 0 0 192.168.1.45:42636 192.168.1.39:17778 ESTABLISHED
tcp 0 0 192.168.1.45:42677 192.168.1.39:17778 ESTABLISHED
tcp 0 0 192.168.1.45:42676 192.168.1.39:17778 ESTABLISHED

Agent korzysta z portu sieciowego 17778 oraz szyfrowania SSL dzięki wsparciu biblioteki OpenSSL.

Bardzo istotne jest użycie aktualnej wersji OpenSSL, która jest pozbawiona znany luk bezpieczeństwa.

Warta zaznaczyć, że nie znajdziemy komend, które inicjuje agent, poprzez komendę „history”. Jest to uwarunkowane faktem, że wszystkie monitorowane statystyki są uzyskiwane poprzez usługę, a nie połączenie SSH. Zatem nie ma możliwości użycia historii konsoli bash do ich podglądu.

Można natomiast przeglądać logi samego agenta i sprawdzić, co dokładnie inicjuje. Poniższy przykład pokazuje pracę szablonu „Linux Disk Monitoring Perl” z użyciem modułu Server & Application Monitor.

[root@centos7 Logs]# pwd
/opt/SolarWinds/Agent/bin/appdata/Logs
[root@centos7 Logs]#
[root@centos7 Logs]# cat APM_job_application.log
—-snip—-
17/11/18 19:52:28.573 PID: 30317 TID: 140015132571456 [INFO] job_application – Starting poll of component 561 (Available space on / partition (MB))
17/11/18 19:52:28.580 PID: 30317 TID: 140015132571456 [DEBUG] scriptrunner – Initial identity: uid=0, gid=992, euid=995, egid=992
17/11/18 19:52:28.580 PID: 30317 TID: 140015132571456 [DEBUG] scriptrunner – User identity before: uid=0, gid=992, euid=995, egid=992
17/11/18 19:52:28.580 PID: 30317 TID: 140015132571456 [DEBUG] scriptrunner – Creating temp script file: /tmp/APM_3QI_oS
17/11/18 19:52:28.581 PID: 30317 TID: 140015132571456 [INFO] scriptrunner – Execution of command (subprocess method): perl /tmp/APM_3QI_oS
17/11/18 19:52:28.604 PID: 30317 TID: 140015132571456 [DEBUG] scriptrunner – Script output:
Message: Available space on / partition in MB : 36851
Statistic: 36851
17/11/18 19:52:28.604 PID: 30317 TID: 140015132571456 [DEBUG] scriptrunner – Script exit code: 0
17/11/18 19:52:28.605 PID: 30317 TID: 140015132571456 [DEBUG] scriptrunner – File /tmp/APM_3QI_oS deleted
17/11/18 19:52:28.605 PID: 30317 TID: 140015132571456 [DEBUG] scriptrunner – User identity after: uid=0, gid=992, euid=995, egid=992
17/11/18 19:52:28.608 PID: 30317 TID: 140015132571456 [DEBUG] job_application – job_application.py exiting

W powyższym przykładzie dokładnie widzimy akcje agenta. Agent tworzy tymczasowy skrypt Perl, wywołuje go (skrypt sprawdza statystyki dysku), a następnie go kasuje.

Akcja jest wykonywana regularnie w wyznaczonych cyklach, domyślnie do 300 sekund.