diff options
author | Leonardo Arena <rnalrd@alpinelinux.org> | 2021-08-18 10:09:34 +0000 |
---|---|---|
committer | Leonardo Arena <rnalrd@alpinelinux.org> | 2021-08-18 10:10:18 +0000 |
commit | bbfde1f9e951809d855ec100be468b2bd0f73817 (patch) | |
tree | c6231376f6d559700d355af1ff39261f447b74a7 | |
parent | ef28ed1ec2574162333663a9b991e666b7ff30a7 (diff) |
community/zabbix: fix proc.num support in Agent 2
Broken since 5.0.13+, see https://support.zabbix.com/browse/ZBX-19614
-rw-r--r-- | community/zabbix/0001-Revert-.G.-ZBXNEXT-6596-added-native-linux-proc.num-.patch | 269 | ||||
-rw-r--r-- | community/zabbix/APKBUILD | 6 |
2 files changed, 273 insertions, 2 deletions
diff --git a/community/zabbix/0001-Revert-.G.-ZBXNEXT-6596-added-native-linux-proc.num-.patch b/community/zabbix/0001-Revert-.G.-ZBXNEXT-6596-added-native-linux-proc.num-.patch new file mode 100644 index 00000000000..bd7e25ba9c6 --- /dev/null +++ b/community/zabbix/0001-Revert-.G.-ZBXNEXT-6596-added-native-linux-proc.num-.patch @@ -0,0 +1,269 @@ +From 581ae83ceaa4274fb4389d09fcf28d62d81f13d8 Mon Sep 17 00:00:00 2001 +From: Leonardo Arena <rnalrd@alpinelinux.org> +Date: Wed, 18 Aug 2021 11:06:57 +0200 +Subject: [PATCH] Revert "...G...... [ZBXNEXT-6596] added native linux proc.num + support plugin to Zabbix agent 2" + +This reverts commit 9427f39e32c5ff5201265ab8c5f73caff9962478. + +See https://support.zabbix.com/browse/ZBX-19614 +--- + src/go/pkg/zbxlib/checks_linux.go | 2 + + src/go/plugins/proc/proc_linux.go | 110 +------------------------ + src/go/plugins/proc/procfs_linux.go | 24 ------ + src/go/plugins/zabbix/sync/sync_nix.go | 1 + + 4 files changed, 6 insertions(+), 131 deletions(-) + +diff --git a/src/go/pkg/zbxlib/checks_linux.go b/src/go/pkg/zbxlib/checks_linux.go +index 206ad9542d..99cefa30cc 100644 +--- a/src/go/pkg/zbxlib/checks_linux.go ++++ b/src/go/pkg/zbxlib/checks_linux.go +@@ -74,6 +74,8 @@ func resolveMetric(key string) (cfunc unsafe.Pointer) { + cfunc = unsafe.Pointer(C.NET_DNS) + case "net.dns.record": + cfunc = unsafe.Pointer(C.NET_DNS_RECORD) ++ case "proc.num": ++ cfunc = unsafe.Pointer(C.PROC_NUM) + case "system.boottime": + cfunc = unsafe.Pointer(C.SYSTEM_BOOTTIME) + case "net.tcp.listen": +diff --git a/src/go/plugins/proc/proc_linux.go b/src/go/plugins/proc/proc_linux.go +index 20af05f34f..5b58d12071 100644 +--- a/src/go/plugins/proc/proc_linux.go ++++ b/src/go/plugins/proc/proc_linux.go +@@ -121,7 +121,6 @@ type procQuery struct { + name string + user string + cmdline string +- state string + } + + const ( +@@ -129,7 +128,6 @@ const ( + procInfoName + procInfoUser + procInfoCmdline +- procInfoState + ) + + type procInfo struct { +@@ -138,7 +136,6 @@ type procInfo struct { + userid int64 + cmdline string + arg0 string +- state string + } + + type cpuUtil struct { +@@ -172,7 +169,6 @@ func newCpuUtilQuery(q *procQuery, pattern *regexp.Regexp) (query *cpuUtilQuery, + return + } + } +- + query.cmdlinePattern = pattern + return + } +@@ -185,13 +181,13 @@ func (p *Plugin) prepareQueries() (queries []*cpuUtilQuery, flags int) { + p.mutex.Lock() + for q, stats := range p.queries { + if now.Sub(stats.accessed) > maxInactivityPeriod { +- p.Debugf("removed unused CPU utilization query %+v", q) ++ p.Debugf("removed unused CPU utilisation query %+v", q) + delete(p.queries, q) + continue + } + var query *cpuUtilQuery + if query, stats.err = newCpuUtilQuery(&q, stats.cmdlinePattern); stats.err != nil { +- p.Debugf("cannot create CPU utilization query %+v: %s", q, stats.err) ++ p.Debugf("cannot create CPU utilisation query %+v: %s", q, stats.err) + continue + } + queries = append(queries, query) +@@ -415,45 +411,9 @@ func (p *Plugin) Export(key string, params []string, ctx plugin.ContextProvider) + } + return + } +-func (p *PluginExport) prepareQuery(q *procQuery) (query *cpuUtilQuery, flags int, err error) { +- regxp, err := regexp.Compile(q.cmdline) +- if err != nil { +- return nil, 0, fmt.Errorf("cannot compile regex for %s: %s", q.cmdline, err.Error()) +- } +- +- if query, err = newCpuUtilQuery(q, regxp); err != nil { +- return nil, 0, fmt.Errorf("cannot create CPU utilization query %+v: %s", q, err.Error()) +- } +- +- if q.name != "" { +- flags |= procInfoName | procInfoCmdline +- } +- if q.user != "" { +- flags |= procInfoUser +- } +- if q.cmdline != "" { +- flags |= procInfoCmdline +- } +- if q.state != "" { +- flags |= procInfoState +- } +- +- return +-} + + // Export - + func (p *PluginExport) Export(key string, params []string, ctx plugin.ContextProvider) (result interface{}, err error) { +- switch key { +- case "proc.mem": +- return p.exportProcMem(params) +- case "proc.num": +- return p.exportProcNum(params) +- } +- +- return nil, plugin.UnsupportedMetricError +-} +- +-func (p *PluginExport) exportProcMem(params []string) (result interface{}, err error) { + var name, mode, cmdline, memtype string + var usr *user.User + +@@ -632,67 +592,6 @@ func (p *PluginExport) exportProcMem(params []string) (result interface{}, err e + return memSize, nil + } + +-func (p *PluginExport) exportProcNum(params []string) (interface{}, error) { +- var name, userName, state, cmdline string +- switch len(params) { +- case 4: +- cmdline = params[3] +- fallthrough +- case 3: +- switch params[2] { +- case "all", "": +- case "disk": +- state = "D" +- case "run": +- state = "R" +- case "sleep": +- state = "S" +- case "trace": +- state = "T" +- case "zomb": +- state = "Z" +- default: +- return nil, errors.New("Invalid third parameter.") +- } +- fallthrough +- case 2: +- userName = params[1] +- fallthrough +- case 1: +- name = params[0] +- case 0: +- default: +- return nil, errors.New("Too many parameters.") +- } +- +- var count int +- +- query, flags, err := p.prepareQuery(&procQuery{name, userName, cmdline, state}) +- if err != nil { +- p.Debugf("Failed to prepare query: %s", err.Error()) +- return count, nil +- } +- +- procs, err := getProcesses(flags) +- if err != nil { +- return nil, fmt.Errorf("Failed to get local processes: %s", err.Error()) +- } +- +- for _, proc := range procs { +- if !query.match(proc) { +- continue +- } +- +- if state != proc.state && state != "" { +- continue +- } +- +- count++ +- } +- +- return count, nil +-} +- + func getMax(a, b float64) float64 { + if a > b { + return a +@@ -776,8 +675,5 @@ func (p *PluginExport) validFile(proc *procInfo, name string, uid int64, cmdRgx + + func init() { + plugin.RegisterMetrics(&impl, "Proc", "proc.cpu.util", "Process CPU utilization percentage.") +- plugin.RegisterMetrics(&implExport, "ProcExporter", +- "proc.mem", "Process memory utilization values.", +- "proc.num", "The number of processes.", +- ) ++ plugin.RegisterMetrics(&implExport, "ProcExporter", "proc.mem", "Process memory utilization values.") + } +diff --git a/src/go/plugins/proc/procfs_linux.go b/src/go/plugins/proc/procfs_linux.go +index e6e1637933..cd9427647a 100644 +--- a/src/go/plugins/proc/procfs_linux.go ++++ b/src/go/plugins/proc/procfs_linux.go +@@ -27,7 +27,6 @@ import ( + "io" + "os" + "strconv" +- "strings" + "syscall" + + "zabbix.com/pkg/procfs" +@@ -62,22 +61,6 @@ func getProcessName(pid string) (name string, err error) { + return string(data[left+1 : right]), nil + } + +-func getProcessState(pid string) (name string, err error) { +- var data []byte +- if data, err = read2k("/proc/" + pid + "/status"); err != nil { +- return +- } +- +- s := strings.Split(string(data), "\n") +- for _, tmp := range s { +- if strings.HasPrefix(tmp, "State:") && len(tmp) > 7 { +- return string(tmp[7:8]), nil +- } +- } +- +- return "", fmt.Errorf("cannot find process state /proc/%s/status", pid) +-} +- + func getProcessUserID(pid string) (userid int64, err error) { + var fi os.FileInfo + if fi, err = os.Stat("/proc/" + pid); err != nil { +@@ -184,13 +167,6 @@ func getProcesses(flags int) (processes []*procInfo, err error) { + continue + } + } +- if flags&procInfoState != 0 { +- if info.state, tmperr = getProcessState(entries[0].Name()); tmperr != nil { +- impl.Debugf("cannot get process %s state: %s", entries[0].Name(), tmperr) +- continue +- } +- } +- + processes = append(processes, info) + } + +diff --git a/src/go/plugins/zabbix/sync/sync_nix.go b/src/go/plugins/zabbix/sync/sync_nix.go +index f22ef75fa7..b743d2e050 100644 +--- a/src/go/plugins/zabbix/sync/sync_nix.go ++++ b/src/go/plugins/zabbix/sync/sync_nix.go +@@ -25,6 +25,7 @@ func getMetrics() []string { + return []string{ + "net.dns", "Checks if DNS service is up.", + "net.dns.record", "Performs DNS query.", ++ "proc.num", "The number of processes.", + "system.hw.chassis", "Chassis information.", + "system.hw.devices", "Listing of PCI or USB devices.", + "vfs.dir.count", "Directory entry count.", +-- +2.32.0 + diff --git a/community/zabbix/APKBUILD b/community/zabbix/APKBUILD index 1ae8d332d7a..e48b949a57a 100644 --- a/community/zabbix/APKBUILD +++ b/community/zabbix/APKBUILD @@ -4,7 +4,7 @@ # Maintainer: Kevin Daudt <kdaudt@alpinelinux.org> pkgname=zabbix pkgver=5.0.14 -pkgrel=0 +pkgrel=1 pkgdesc="Enterprise-class open source distributed monitoring" url="http://www.zabbix.com" arch="all" @@ -39,6 +39,7 @@ source="$pkgname-$pkgver.tar.gz::https://github.com/zabbix/zabbix/archive/${pkgv musl-fix-includes.patch zabbix_server.conf.patch zabbix_agent2.conf.patch + 0001-Revert-.G.-ZBXNEXT-6596-added-native-linux-proc.num-.patch " builddir="$srcdir/$pkgname-${pkgver/_/}" @@ -265,4 +266,5 @@ a26e7ac422ff60a4b8eed3603022c3a1bde640870bb9286ab061c3cb5c2fd7e91ddb317cb3d1cf61 7f70dfd602aa164ec8cc65ebb7e8274c685975f6aea9051933928051b8d9b6e368e5a673a07e7084a2105468c5085d72fa7b9f934460f10648d594f28f031a91 automake.patch 72709df7624d99b2eaab8d91d95167580e80da10b3ac65b7f27f12d858f0d051d4f9143bcabceae2bfd51aeb7c4ca93e2b74670637ec0925b026e3c52475d52b musl-fix-includes.patch 183e2d99800d8eebb932cb31c5a3e8742ce6a15e87aec50dc49d9c20b35840eb7ede9920aa62d2c7a5e3f584f5c3df398aa08e93f98fa537a3ba6db63b472a1f zabbix_server.conf.patch -84cc513fb5593d571e06e13afd0f6cfef78cbca71824f4d79dbaac71dcb7f8c4708a78b354fa4b9b814abc7edc170f513cebd7c247182c200e5fde4f928aa085 zabbix_agent2.conf.patch" +84cc513fb5593d571e06e13afd0f6cfef78cbca71824f4d79dbaac71dcb7f8c4708a78b354fa4b9b814abc7edc170f513cebd7c247182c200e5fde4f928aa085 zabbix_agent2.conf.patch +f054a34c519266e86f8c556bec3e7513d71ca0917ee54112df95d3dceb480488641dfdd225360a705348c633b962d1c8f677dbaa1d965ed1cae6827f5e902e29 0001-Revert-.G.-ZBXNEXT-6596-added-native-linux-proc.num-.patch" |