summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/apache
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-08-26 08:15:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-08-26 08:15:20 +0000
commit87d772a7d708fec12f48cd8adc0dedff6e1025da (patch)
tree1fee344c64cc3f43074a01981e21126c8482a522 /src/go/collectors/go.d.plugin/modules/apache
parentAdding upstream version 1.46.3. (diff)
downloadnetdata-87d772a7d708fec12f48cd8adc0dedff6e1025da.tar.xz
netdata-87d772a7d708fec12f48cd8adc0dedff6e1025da.zip
Adding upstream version 1.47.0.upstream/1.47.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/go/collectors/go.d.plugin/modules/apache')
l---------src/go/collectors/go.d.plugin/modules/apache/README.md1
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/apache.go116
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/apache_test.go345
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/charts.go189
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/collect.go163
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/config_schema.json177
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/init.go25
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/integrations/apache.md238
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/integrations/httpd.md238
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/metadata.yaml302
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/metrics.go61
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/testdata/config.json20
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/testdata/config.yaml17
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/testdata/extended-status-mpm-event.txt39
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/testdata/extended-status-mpm-prefork.txt48
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/testdata/lighttpd-status.txt6
-rw-r--r--src/go/collectors/go.d.plugin/modules/apache/testdata/simple-status-mpm-event.txt24
17 files changed, 0 insertions, 2009 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/apache/README.md b/src/go/collectors/go.d.plugin/modules/apache/README.md
deleted file mode 120000
index 066ee4162..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/README.md
+++ /dev/null
@@ -1 +0,0 @@
-integrations/apache.md \ No newline at end of file
diff --git a/src/go/collectors/go.d.plugin/modules/apache/apache.go b/src/go/collectors/go.d.plugin/modules/apache/apache.go
deleted file mode 100644
index 2c958ecf5..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/apache.go
+++ /dev/null
@@ -1,116 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-package apache
-
-import (
- _ "embed"
- "errors"
- "net/http"
- "sync"
- "time"
-
- "github.com/netdata/netdata/go/go.d.plugin/agent/module"
- "github.com/netdata/netdata/go/go.d.plugin/pkg/web"
-)
-
-//go:embed "config_schema.json"
-var configSchema string
-
-func init() {
- module.Register("apache", module.Creator{
- Create: func() module.Module { return New() },
- JobConfigSchema: configSchema,
- Config: func() any { return &Config{} },
- })
-}
-
-func New() *Apache {
- return &Apache{
- Config: Config{
- HTTP: web.HTTP{
- Request: web.Request{
- URL: "http://127.0.0.1/server-status?auto",
- },
- Client: web.Client{
- Timeout: web.Duration(time.Second),
- },
- },
- },
- charts: &module.Charts{},
- once: &sync.Once{},
- }
-}
-
-type Config struct {
- UpdateEvery int `yaml:"update_every,omitempty" json:"update_every"`
- web.HTTP `yaml:",inline" json:""`
-}
-
-type Apache struct {
- module.Base
- Config `yaml:",inline" json:""`
-
- charts *module.Charts
-
- httpClient *http.Client
-
- once *sync.Once
-}
-
-func (a *Apache) Configuration() any {
- return a.Config
-}
-
-func (a *Apache) Init() error {
- if err := a.validateConfig(); err != nil {
- a.Errorf("config validation: %v", err)
- return err
- }
-
- httpClient, err := a.initHTTPClient()
- if err != nil {
- a.Errorf("init HTTP client: %v", err)
- return err
- }
- a.httpClient = httpClient
-
- a.Debugf("using URL %s", a.URL)
- a.Debugf("using timeout: %s", a.Timeout)
-
- return nil
-}
-
-func (a *Apache) Check() error {
- mx, err := a.collect()
- if err != nil {
- a.Error(err)
- return err
- }
- if len(mx) == 0 {
- return errors.New("no metrics collected")
-
- }
- return nil
-}
-
-func (a *Apache) Charts() *module.Charts {
- return a.charts
-}
-
-func (a *Apache) Collect() map[string]int64 {
- mx, err := a.collect()
- if err != nil {
- a.Error(err)
- }
-
- if len(mx) == 0 {
- return nil
- }
- return mx
-}
-
-func (a *Apache) Cleanup() {
- if a.httpClient != nil {
- a.httpClient.CloseIdleConnections()
- }
-}
diff --git a/src/go/collectors/go.d.plugin/modules/apache/apache_test.go b/src/go/collectors/go.d.plugin/modules/apache/apache_test.go
deleted file mode 100644
index 02e97ff1b..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/apache_test.go
+++ /dev/null
@@ -1,345 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-package apache
-
-import (
- "net/http"
- "net/http/httptest"
- "os"
- "testing"
-
- "github.com/netdata/netdata/go/go.d.plugin/agent/module"
- "github.com/netdata/netdata/go/go.d.plugin/pkg/web"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-)
-
-var (
- dataConfigJSON, _ = os.ReadFile("testdata/config.json")
- dataConfigYAML, _ = os.ReadFile("testdata/config.yaml")
-
- dataSimpleStatusMPMEvent, _ = os.ReadFile("testdata/simple-status-mpm-event.txt")
- dataExtendedStatusMPMEvent, _ = os.ReadFile("testdata/extended-status-mpm-event.txt")
- dataExtendedStatusMPMPrefork, _ = os.ReadFile("testdata/extended-status-mpm-prefork.txt")
- dataLighttpdStatus, _ = os.ReadFile("testdata/lighttpd-status.txt")
-)
-
-func Test_testDataIsValid(t *testing.T) {
- for name, data := range map[string][]byte{
- "dataConfigJSON": dataConfigJSON,
- "dataConfigYAML": dataConfigYAML,
- "dataSimpleStatusMPMEvent": dataSimpleStatusMPMEvent,
- "dataExtendedStatusMPMEvent": dataExtendedStatusMPMEvent,
- "dataExtendedStatusMPMPrefork": dataExtendedStatusMPMPrefork,
- "dataLighttpdStatus": dataLighttpdStatus,
- } {
- require.NotNil(t, data, name)
-
- }
-}
-
-func TestApache_ConfigurationSerialize(t *testing.T) {
- module.TestConfigurationSerialize(t, &Apache{}, dataConfigJSON, dataConfigYAML)
-}
-
-func TestApache_Init(t *testing.T) {
- tests := map[string]struct {
- wantFail bool
- config Config
- }{
- "success with default": {
- wantFail: false,
- config: New().Config,
- },
- "fail when URL not set": {
- wantFail: true,
- config: Config{
- HTTP: web.HTTP{
- Request: web.Request{URL: ""},
- },
- },
- },
- "fail when URL has no wantMetrics suffix": {
- wantFail: true,
- config: Config{
- HTTP: web.HTTP{
- Request: web.Request{URL: "http://127.0.0.1:38001"},
- },
- },
- },
- }
-
- for name, test := range tests {
- t.Run(name, func(t *testing.T) {
- apache := New()
- apache.Config = test.config
-
- if test.wantFail {
- assert.Error(t, apache.Init())
- } else {
- assert.NoError(t, apache.Init())
- }
- })
- }
-}
-
-func TestApache_Check(t *testing.T) {
- tests := map[string]struct {
- wantFail bool
- prepare func(t *testing.T) (apache *Apache, cleanup func())
- }{
- "success on simple status MPM Event": {
- wantFail: false,
- prepare: caseMPMEventSimpleStatus,
- },
- "success on extended status MPM Event": {
- wantFail: false,
- prepare: caseMPMEventExtendedStatus,
- },
- "success on extended status MPM Prefork": {
- wantFail: false,
- prepare: caseMPMPreforkExtendedStatus,
- },
- "fail on Lighttpd response": {
- wantFail: true,
- prepare: caseLighttpdResponse,
- },
- "fail on invalid data response": {
- wantFail: true,
- prepare: caseInvalidDataResponse,
- },
- "fail on connection refused": {
- wantFail: true,
- prepare: caseConnectionRefused,
- },
- "fail on 404 response": {
- wantFail: true,
- prepare: case404,
- },
- }
-
- for name, test := range tests {
- t.Run(name, func(t *testing.T) {
- apache, cleanup := test.prepare(t)
- defer cleanup()
-
- if test.wantFail {
- assert.Error(t, apache.Check())
- } else {
- assert.NoError(t, apache.Check())
- }
- })
- }
-}
-
-func TestApache_Charts(t *testing.T) {
- assert.NotNil(t, New().Charts())
-}
-
-func TestApache_Collect(t *testing.T) {
- tests := map[string]struct {
- prepare func(t *testing.T) (apache *Apache, cleanup func())
- wantNumOfCharts int
- wantMetrics map[string]int64
- }{
- "success on simple status MPM Event": {
- prepare: caseMPMEventSimpleStatus,
- wantNumOfCharts: len(baseCharts),
- wantMetrics: map[string]int64{
- "busy_workers": 1,
- "conns_async_closing": 0,
- "conns_async_keep_alive": 0,
- "conns_async_writing": 0,
- "conns_total": 0,
- "idle_workers": 74,
- "scoreboard_closing": 0,
- "scoreboard_dns_lookup": 0,
- "scoreboard_finishing": 0,
- "scoreboard_idle_cleanup": 0,
- "scoreboard_keepalive": 0,
- "scoreboard_logging": 0,
- "scoreboard_open": 325,
- "scoreboard_reading": 0,
- "scoreboard_sending": 1,
- "scoreboard_starting": 0,
- "scoreboard_waiting": 74,
- },
- },
- "success on extended status MPM Event": {
- prepare: caseMPMEventExtendedStatus,
- wantNumOfCharts: len(baseCharts) + len(extendedCharts),
- wantMetrics: map[string]int64{
- "busy_workers": 1,
- "bytes_per_req": 136533000,
- "bytes_per_sec": 4800000,
- "conns_async_closing": 0,
- "conns_async_keep_alive": 0,
- "conns_async_writing": 0,
- "conns_total": 0,
- "idle_workers": 99,
- "req_per_sec": 3515,
- "scoreboard_closing": 0,
- "scoreboard_dns_lookup": 0,
- "scoreboard_finishing": 0,
- "scoreboard_idle_cleanup": 0,
- "scoreboard_keepalive": 0,
- "scoreboard_logging": 0,
- "scoreboard_open": 300,
- "scoreboard_reading": 0,
- "scoreboard_sending": 1,
- "scoreboard_starting": 0,
- "scoreboard_waiting": 99,
- "total_accesses": 9,
- "total_kBytes": 12,
- "uptime": 256,
- },
- },
- "success on extended status MPM Prefork": {
- prepare: caseMPMPreforkExtendedStatus,
- wantNumOfCharts: len(baseCharts) + len(extendedCharts) - 2,
- wantMetrics: map[string]int64{
- "busy_workers": 70,
- "bytes_per_req": 3617880000,
- "bytes_per_sec": 614250000000,
- "idle_workers": 1037,
- "req_per_sec": 16978100,
- "scoreboard_closing": 0,
- "scoreboard_dns_lookup": 0,
- "scoreboard_finishing": 0,
- "scoreboard_idle_cleanup": 0,
- "scoreboard_keepalive": 0,
- "scoreboard_logging": 0,
- "scoreboard_open": 3,
- "scoreboard_reading": 0,
- "scoreboard_sending": 0,
- "scoreboard_starting": 0,
- "scoreboard_waiting": 3,
- "total_accesses": 120358784,
- "total_kBytes": 4252382776,
- "uptime": 708904,
- },
- },
- "fail on Lighttpd response": {
- prepare: caseLighttpdResponse,
- wantNumOfCharts: 0,
- wantMetrics: nil,
- },
- "fail on invalid data response": {
- prepare: caseInvalidDataResponse,
- wantNumOfCharts: 0,
- wantMetrics: nil,
- },
- "fail on connection refused": {
- prepare: caseConnectionRefused,
- wantNumOfCharts: 0,
- wantMetrics: nil,
- },
- "fail on 404 response": {
- prepare: case404,
- wantNumOfCharts: 0,
- wantMetrics: nil,
- },
- }
-
- for name, test := range tests {
- t.Run(name, func(t *testing.T) {
- apache, cleanup := test.prepare(t)
- defer cleanup()
-
- _ = apache.Check()
-
- collected := apache.Collect()
-
- require.Equal(t, test.wantMetrics, collected)
- assert.Equal(t, test.wantNumOfCharts, len(*apache.Charts()))
- })
- }
-}
-
-func caseMPMEventSimpleStatus(t *testing.T) (*Apache, func()) {
- t.Helper()
- srv := httptest.NewServer(http.HandlerFunc(
- func(w http.ResponseWriter, r *http.Request) {
- _, _ = w.Write(dataSimpleStatusMPMEvent)
- }))
- apache := New()
- apache.URL = srv.URL + "/server-status?auto"
- require.NoError(t, apache.Init())
-
- return apache, srv.Close
-}
-
-func caseMPMEventExtendedStatus(t *testing.T) (*Apache, func()) {
- t.Helper()
- srv := httptest.NewServer(http.HandlerFunc(
- func(w http.ResponseWriter, r *http.Request) {
- _, _ = w.Write(dataExtendedStatusMPMEvent)
- }))
- apache := New()
- apache.URL = srv.URL + "/server-status?auto"
- require.NoError(t, apache.Init())
-
- return apache, srv.Close
-}
-
-func caseMPMPreforkExtendedStatus(t *testing.T) (*Apache, func()) {
- t.Helper()
- srv := httptest.NewServer(http.HandlerFunc(
- func(w http.ResponseWriter, r *http.Request) {
- _, _ = w.Write(dataExtendedStatusMPMPrefork)
- }))
- apache := New()
- apache.URL = srv.URL + "/server-status?auto"
- require.NoError(t, apache.Init())
-
- return apache, srv.Close
-}
-
-func caseLighttpdResponse(t *testing.T) (*Apache, func()) {
- t.Helper()
- srv := httptest.NewServer(http.HandlerFunc(
- func(w http.ResponseWriter, r *http.Request) {
- _, _ = w.Write(dataLighttpdStatus)
- }))
- apache := New()
- apache.URL = srv.URL + "/server-status?auto"
- require.NoError(t, apache.Init())
-
- return apache, srv.Close
-}
-
-func caseInvalidDataResponse(t *testing.T) (*Apache, func()) {
- t.Helper()
- srv := httptest.NewServer(http.HandlerFunc(
- func(w http.ResponseWriter, r *http.Request) {
- _, _ = w.Write([]byte("hello and\n goodbye"))
- }))
- apache := New()
- apache.URL = srv.URL + "/server-status?auto"
- require.NoError(t, apache.Init())
-
- return apache, srv.Close
-}
-
-func caseConnectionRefused(t *testing.T) (*Apache, func()) {
- t.Helper()
- apache := New()
- apache.URL = "http://127.0.0.1:65001/server-status?auto"
- require.NoError(t, apache.Init())
-
- return apache, func() {}
-}
-
-func case404(t *testing.T) (*Apache, func()) {
- t.Helper()
- srv := httptest.NewServer(http.HandlerFunc(
- func(w http.ResponseWriter, r *http.Request) {
- w.WriteHeader(http.StatusNotFound)
- }))
- apache := New()
- apache.URL = srv.URL + "/server-status?auto"
- require.NoError(t, apache.Init())
-
- return apache, srv.Close
-}
diff --git a/src/go/collectors/go.d.plugin/modules/apache/charts.go b/src/go/collectors/go.d.plugin/modules/apache/charts.go
deleted file mode 100644
index 5470aecad..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/charts.go
+++ /dev/null
@@ -1,189 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-package apache
-
-import "github.com/netdata/netdata/go/go.d.plugin/agent/module"
-
-const (
- prioRequests = module.Priority + iota
- prioConnection
- prioConnsAsync
- prioScoreboard
- prioNet
- prioWorkers
- prioReqPerSec
- prioBytesPerSec
- prioBytesPerReq
- prioUptime
-)
-
-var baseCharts = module.Charts{
- chartConnections.Copy(),
- chartConnsAsync.Copy(),
- chartWorkers.Copy(),
- chartScoreboard.Copy(),
-}
-
-var extendedCharts = module.Charts{
- chartRequests.Copy(),
- chartBandwidth.Copy(),
- chartReqPerSec.Copy(),
- chartBytesPerSec.Copy(),
- chartBytesPerReq.Copy(),
- chartUptime.Copy(),
-}
-
-func newCharts(s *serverStatus) *module.Charts {
- charts := baseCharts.Copy()
-
- // ServerMPM: prefork
- if s.Connections.Total == nil {
- _ = charts.Remove(chartConnections.ID)
- }
- if s.Connections.Async.KeepAlive == nil {
- _ = charts.Remove(chartConnsAsync.ID)
- }
-
- if s.Total.Accesses != nil {
- _ = charts.Add(*extendedCharts.Copy()...)
- }
-
- return charts
-}
-
-// simple status
-var (
- chartConnections = module.Chart{
- ID: "connections",
- Title: "Connections",
- Units: "connections",
- Fam: "connections",
- Ctx: "apache.connections",
- Priority: prioConnection,
- Dims: module.Dims{
- {ID: "conns_total", Name: "connections"},
- },
- }
- chartConnsAsync = module.Chart{
- ID: "conns_async",
- Title: "Async Connections",
- Units: "connections",
- Fam: "connections",
- Ctx: "apache.conns_async",
- Type: module.Stacked,
- Priority: prioConnsAsync,
- Dims: module.Dims{
- {ID: "conns_async_keep_alive", Name: "keepalive"},
- {ID: "conns_async_closing", Name: "closing"},
- {ID: "conns_async_writing", Name: "writing"},
- },
- }
- chartWorkers = module.Chart{
- ID: "workers",
- Title: "Workers Threads",
- Units: "workers",
- Fam: "workers",
- Ctx: "apache.workers",
- Type: module.Stacked,
- Priority: prioWorkers,
- Dims: module.Dims{
- {ID: "idle_workers", Name: "idle"},
- {ID: "busy_workers", Name: "busy"},
- },
- }
- chartScoreboard = module.Chart{
- ID: "scoreboard",
- Title: "Scoreboard",
- Units: "connections",
- Fam: "connections",
- Ctx: "apache.scoreboard",
- Priority: prioScoreboard,
- Dims: module.Dims{
- {ID: "scoreboard_waiting", Name: "waiting"},
- {ID: "scoreboard_starting", Name: "starting"},
- {ID: "scoreboard_reading", Name: "reading"},
- {ID: "scoreboard_sending", Name: "sending"},
- {ID: "scoreboard_keepalive", Name: "keepalive"},
- {ID: "scoreboard_dns_lookup", Name: "dns_lookup"},
- {ID: "scoreboard_closing", Name: "closing"},
- {ID: "scoreboard_logging", Name: "logging"},
- {ID: "scoreboard_finishing", Name: "finishing"},
- {ID: "scoreboard_idle_cleanup", Name: "idle_cleanup"},
- {ID: "scoreboard_open", Name: "open"},
- },
- }
-)
-
-// extended status
-var (
- chartRequests = module.Chart{
- ID: "requests",
- Title: "Requests",
- Units: "requests/s",
- Fam: "requests",
- Ctx: "apache.requests",
- Priority: prioRequests,
- Dims: module.Dims{
- {ID: "total_accesses", Name: "requests", Algo: module.Incremental},
- },
- }
- chartBandwidth = module.Chart{
- ID: "net",
- Title: "Bandwidth",
- Units: "kilobits/s",
- Fam: "bandwidth",
- Ctx: "apache.net",
- Type: module.Area,
- Priority: prioNet,
- Dims: module.Dims{
- {ID: "total_kBytes", Name: "sent", Algo: module.Incremental, Mul: 8},
- },
- }
- chartReqPerSec = module.Chart{
- ID: "reqpersec",
- Title: "Lifetime Average Number Of Requests Per Second",
- Units: "requests/s",
- Fam: "statistics",
- Ctx: "apache.reqpersec",
- Type: module.Area,
- Priority: prioReqPerSec,
- Dims: module.Dims{
- {ID: "req_per_sec", Name: "requests", Div: 100000},
- },
- }
- chartBytesPerSec = module.Chart{
- ID: "bytespersec",
- Title: "Lifetime Average Number Of Bytes Served Per Second",
- Units: "KiB/s",
- Fam: "statistics",
- Ctx: "apache.bytespersec",
- Type: module.Area,
- Priority: prioBytesPerSec,
- Dims: module.Dims{
- {ID: "bytes_per_sec", Name: "served", Mul: 8, Div: 1024 * 100000},
- },
- }
- chartBytesPerReq = module.Chart{
- ID: "bytesperreq",
- Title: "Lifetime Average Response Size",
- Units: "KiB",
- Fam: "statistics",
- Ctx: "apache.bytesperreq",
- Type: module.Area,
- Priority: prioBytesPerReq,
- Dims: module.Dims{
- {ID: "bytes_per_req", Name: "size", Div: 1024 * 100000},
- },
- }
- chartUptime = module.Chart{
- ID: "uptime",
- Title: "Uptime",
- Units: "seconds",
- Fam: "availability",
- Ctx: "apache.uptime",
- Priority: prioUptime,
- Dims: module.Dims{
- {ID: "uptime"},
- },
- }
-)
diff --git a/src/go/collectors/go.d.plugin/modules/apache/collect.go b/src/go/collectors/go.d.plugin/modules/apache/collect.go
deleted file mode 100644
index 52bad9fda..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/collect.go
+++ /dev/null
@@ -1,163 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-package apache
-
-import (
- "bufio"
- "fmt"
- "io"
- "net/http"
- "strconv"
- "strings"
-
- "github.com/netdata/netdata/go/go.d.plugin/pkg/stm"
- "github.com/netdata/netdata/go/go.d.plugin/pkg/web"
-)
-
-func (a *Apache) collect() (map[string]int64, error) {
- status, err := a.scrapeStatus()
- if err != nil {
- return nil, err
- }
-
- mx := stm.ToMap(status)
- if len(mx) == 0 {
- return nil, fmt.Errorf("nothing was collected from %s", a.URL)
- }
-
- a.once.Do(func() { a.charts = newCharts(status) })
-
- return mx, nil
-}
-
-func (a *Apache) scrapeStatus() (*serverStatus, error) {
- req, err := web.NewHTTPRequest(a.Request)
- if err != nil {
- return nil, err
- }
-
- resp, err := a.httpClient.Do(req)
- if err != nil {
- return nil, fmt.Errorf("error on HTTP request '%s': %v", req.URL, err)
- }
- defer closeBody(resp)
-
- if resp.StatusCode != http.StatusOK {
- return nil, fmt.Errorf("'%s' returned HTTP status code: %d", req.URL, resp.StatusCode)
- }
-
- return parseResponse(resp.Body)
-}
-
-func parseResponse(r io.Reader) (*serverStatus, error) {
- s := bufio.NewScanner(r)
- var status serverStatus
-
- for s.Scan() {
- parts := strings.Split(s.Text(), ":")
- if len(parts) != 2 {
- continue
- }
-
- key, value := strings.TrimSpace(parts[0]), strings.TrimSpace(parts[1])
-
- switch key {
- default:
- case "BusyServers", "IdleServers":
- return nil, fmt.Errorf("found '%s', Lighttpd data", key)
- case "BusyWorkers":
- status.Workers.Busy = parseInt(value)
- case "IdleWorkers":
- status.Workers.Idle = parseInt(value)
- case "ConnsTotal":
- status.Connections.Total = parseInt(value)
- case "ConnsAsyncWriting":
- status.Connections.Async.Writing = parseInt(value)
- case "ConnsAsyncKeepAlive":
- status.Connections.Async.KeepAlive = parseInt(value)
- case "ConnsAsyncClosing":
- status.Connections.Async.Closing = parseInt(value)
- case "Total Accesses":
- status.Total.Accesses = parseInt(value)
- case "Total kBytes":
- status.Total.KBytes = parseInt(value)
- case "Uptime":
- status.Uptime = parseInt(value)
- case "ReqPerSec":
- status.Averages.ReqPerSec = parseFloat(value)
- case "BytesPerSec":
- status.Averages.BytesPerSec = parseFloat(value)
- case "BytesPerReq":
- status.Averages.BytesPerReq = parseFloat(value)
- case "Scoreboard":
- status.Scoreboard = parseScoreboard(value)
- }
- }
-
- return &status, nil
-}
-
-func parseScoreboard(line string) *scoreboard {
- // “_” Waiting for Connection
- // “S” Starting up
- // “R” Reading Request
- // “W” Sending Reply
- // “K” Keepalive (read)
- // “D” DNS Lookup
- // “C” Closing connection
- // “L” Logging
- // “G” Gracefully finishing
- // “I” Idle cleanup of worker
- // “.” Open slot with no current process
- var sb scoreboard
- for _, s := range strings.Split(line, "") {
- switch s {
- case "_":
- sb.Waiting++
- case "S":
- sb.Starting++
- case "R":
- sb.Reading++
- case "W":
- sb.Sending++
- case "K":
- sb.KeepAlive++
- case "D":
- sb.DNSLookup++
- case "C":
- sb.Closing++
- case "L":
- sb.Logging++
- case "G":
- sb.Finishing++
- case "I":
- sb.IdleCleanup++
- case ".":
- sb.Open++
- }
- }
- return &sb
-}
-
-func parseInt(value string) *int64 {
- v, err := strconv.ParseInt(value, 10, 64)
- if err != nil {
- return nil
- }
- return &v
-}
-
-func parseFloat(value string) *float64 {
- v, err := strconv.ParseFloat(value, 64)
- if err != nil {
- return nil
- }
- return &v
-}
-
-func closeBody(resp *http.Response) {
- if resp != nil && resp.Body != nil {
- _, _ = io.Copy(io.Discard, resp.Body)
- _ = resp.Body.Close()
- }
-}
diff --git a/src/go/collectors/go.d.plugin/modules/apache/config_schema.json b/src/go/collectors/go.d.plugin/modules/apache/config_schema.json
deleted file mode 100644
index 94e30202f..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/config_schema.json
+++ /dev/null
@@ -1,177 +0,0 @@
-{
- "jsonSchema": {
- "$schema": "http://json-schema.org/draft-07/schema#",
- "title": "Apache collector configuration.",
- "type": "object",
- "properties": {
- "update_every": {
- "title": "Update every",
- "description": "Data collection interval, measured in seconds.",
- "type": "integer",
- "minimum": 1,
- "default": 1
- },
- "url": {
- "title": "URL",
- "description": "The URL of the Apache machine readable [status page](https://httpd.apache.org/docs/2.4/mod/mod_status.html).",
- "type": "string",
- "default": "http://127.0.0.1/server-status?auto",
- "format": "uri"
- },
- "timeout": {
- "title": "Timeout",
- "description": "The timeout in seconds for the HTTP request.",
- "type": "number",
- "minimum": 0.5,
- "default": 1
- },
- "not_follow_redirects": {
- "title": "Not follow redirects",
- "description": "If set, the client will not follow HTTP redirects automatically.",
- "type": "boolean"
- },
- "username": {
- "title": "Username",
- "description": "The username for basic authentication.",
- "type": "string",
- "sensitive": true
- },
- "password": {
- "title": "Password",
- "description": "The password for basic authentication.",
- "type": "string",
- "sensitive": true
- },
- "proxy_url": {
- "title": "Proxy URL",
- "description": "The URL of the proxy server.",
- "type": "string"
- },
- "proxy_username": {
- "title": "Proxy username",
- "description": "The username for proxy authentication.",
- "type": "string",
- "sensitive": true
- },
- "proxy_password": {
- "title": "Proxy password",
- "description": "The password for proxy authentication.",
- "type": "string",
- "sensitive": true
- },
- "headers": {
- "title": "Headers",
- "description": "Additional HTTP headers to include in the request.",
- "type": [
- "object",
- "null"
- ],
- "additionalProperties": {
- "type": "string"
- }
- },
- "tls_skip_verify": {
- "title": "Skip TLS verification",
- "description": "If set, TLS certificate verification will be skipped.",
- "type": "boolean"
- },
- "tls_ca": {
- "title": "TLS CA",
- "description": "The path to the CA certificate file for TLS verification.",
- "type": "string",
- "pattern": "^$|^/"
- },
- "tls_cert": {
- "title": "TLS certificate",
- "description": "The path to the client certificate file for TLS authentication.",
- "type": "string",
- "pattern": "^$|^/"
- },
- "tls_key": {
- "title": "TLS key",
- "description": "The path to the client key file for TLS authentication.",
- "type": "string",
- "pattern": "^$|^/"
- },
- "body": {
- "title": "Body",
- "type": "string"
- },
- "method": {
- "title": "Method",
- "type": "string"
- }
- },
- "required": [
- "url"
- ],
- "additionalProperties": false,
- "patternProperties": {
- "^name$": {}
- }
- },
- "uiSchema": {
- "uiOptions": {
- "fullPage": true
- },
- "body": {
- "ui:widget": "hidden"
- },
- "method": {
- "ui:widget": "hidden"
- },
- "timeout": {
- "ui:help": "Accepts decimals for precise control (e.g., type 1.5 for 1.5 seconds)."
- },
- "password": {
- "ui:widget": "password"
- },
- "proxy_password": {
- "ui:widget": "password"
- },
- "ui:flavour": "tabs",
- "ui:options": {
- "tabs": [
- {
- "title": "Base",
- "fields": [
- "update_every",
- "url",
- "timeout",
- "not_follow_redirects"
- ]
- },
- {
- "title": "Auth",
- "fields": [
- "username",
- "password"
- ]
- },
- {
- "title": "TLS",
- "fields": [
- "tls_skip_verify",
- "tls_ca",
- "tls_cert",
- "tls_key"
- ]
- },
- {
- "title": "Proxy",
- "fields": [
- "proxy_url",
- "proxy_username",
- "proxy_password"
- ]
- },
- {
- "title": "Headers",
- "fields": [
- "headers"
- ]
- }
- ]
- }
- }
-}
diff --git a/src/go/collectors/go.d.plugin/modules/apache/init.go b/src/go/collectors/go.d.plugin/modules/apache/init.go
deleted file mode 100644
index 00fc9d7e6..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/init.go
+++ /dev/null
@@ -1,25 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-package apache
-
-import (
- "errors"
- "net/http"
- "strings"
-
- "github.com/netdata/netdata/go/go.d.plugin/pkg/web"
-)
-
-func (a *Apache) validateConfig() error {
- if a.URL == "" {
- return errors.New("url not set")
- }
- if !strings.HasSuffix(a.URL, "?auto") {
- return errors.New("invalid URL, should ends in '?auto'")
- }
- return nil
-}
-
-func (a *Apache) initHTTPClient() (*http.Client, error) {
- return web.NewHTTPClient(a.Client)
-}
diff --git a/src/go/collectors/go.d.plugin/modules/apache/integrations/apache.md b/src/go/collectors/go.d.plugin/modules/apache/integrations/apache.md
deleted file mode 100644
index 6b46ffbeb..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/integrations/apache.md
+++ /dev/null
@@ -1,238 +0,0 @@
-<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/apache/integrations/apache.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/apache/metadata.yaml"
-sidebar_label: "Apache"
-learn_status: "Published"
-learn_rel_path: "Collecting Metrics/Web Servers and Web Proxies"
-most_popular: True
-message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
-endmeta-->
-
-# Apache
-
-
-<img src="https://netdata.cloud/img/apache.svg" width="150"/>
-
-
-Plugin: go.d.plugin
-Module: apache
-
-<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
-
-## Overview
-
-This collector monitors the activity and performance of Apache servers, and collects metrics such as the number of connections, workers, requests and more.
-
-
-It sends HTTP requests to the Apache location [server-status](https://httpd.apache.org/docs/2.4/mod/mod_status.html),
-which is a built-in location that provides metrics about the Apache server.
-
-
-This collector is supported on all platforms.
-
-This collector supports collecting metrics from multiple instances of this integration, including remote instances.
-
-
-### Default Behavior
-
-#### Auto-Detection
-
-By default, it detects Apache instances running on localhost that are listening on port 80.
-On startup, it tries to collect metrics from:
-
-- http://localhost/server-status?auto
-- http://127.0.0.1/server-status?auto
-
-
-#### Limits
-
-The default configuration for this integration does not impose any limits on data collection.
-
-#### Performance Impact
-
-The default configuration for this integration is not expected to impose a significant performance impact on the system.
-
-
-## Metrics
-
-Metrics grouped by *scope*.
-
-The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
-
-All metrics available only if [ExtendedStatus](https://httpd.apache.org/docs/2.4/mod/core.html#extendedstatus) is on.
-
-
-### Per Apache instance
-
-These metrics refer to the entire monitored application.
-
-This scope has no labels.
-
-Metrics:
-
-| Metric | Dimensions | Unit | Basic | Extended |
-|:------|:----------|:----|:---:|:---:|
-| apache.connections | connections | connections | • | • |
-| apache.conns_async | keepalive, closing, writing | connections | • | • |
-| apache.workers | idle, busy | workers | • | • |
-| apache.scoreboard | waiting, starting, reading, sending, keepalive, dns_lookup, closing, logging, finishing, idle_cleanup, open | connections | • | • |
-| apache.requests | requests | requests/s | | • |
-| apache.net | sent | kilobit/s | | • |
-| apache.reqpersec | requests | requests/s | | • |
-| apache.bytespersec | served | KiB/s | | • |
-| apache.bytesperreq | size | KiB | | • |
-| apache.uptime | uptime | seconds | | • |
-
-
-
-## Alerts
-
-There are no alerts configured by default for this integration.
-
-
-## Setup
-
-### Prerequisites
-
-#### Enable Apache status support
-
-- Enable and configure [status_module](https://httpd.apache.org/docs/2.4/mod/mod_status.html).
-- Ensure that you have [ExtendedStatus](https://httpd.apache.org/docs/2.4/mod/mod_status.html#troubleshoot) set on (enabled by default since Apache v2.3.6).
-
-
-
-### Configuration
-
-#### File
-
-The configuration file name for this integration is `go.d/apache.conf`.
-
-
-You can edit the configuration file using the `edit-config` script from the
-Netdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).
-
-```bash
-cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
-sudo ./edit-config go.d/apache.conf
-```
-#### Options
-
-The following options can be defined globally: update_every, autodetection_retry.
-
-
-<details open><summary>Config options</summary>
-
-| Name | Description | Default | Required |
-|:----|:-----------|:-------|:--------:|
-| update_every | Data collection frequency. | 1 | no |
-| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |
-| url | Server URL. | http://127.0.0.1/server-status?auto | yes |
-| timeout | HTTP request timeout. | 1 | no |
-| username | Username for basic HTTP authentication. | | no |
-| password | Password for basic HTTP authentication. | | no |
-| proxy_url | Proxy URL. | | no |
-| proxy_username | Username for proxy basic HTTP authentication. | | no |
-| proxy_password | Password for proxy basic HTTP authentication. | | no |
-| method | HTTP request method. | GET | no |
-| body | HTTP request body. | | no |
-| headers | HTTP request headers. | | no |
-| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |
-| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |
-| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no |
-| tls_cert | Client TLS certificate. | | no |
-| tls_key | Client TLS key. | | no |
-
-</details>
-
-#### Examples
-
-##### Basic
-
-A basic example configuration.
-
-```yaml
-jobs:
- - name: local
- url: http://127.0.0.1/server-status?auto
-
-```
-##### HTTP authentication
-
-Basic HTTP authentication.
-
-<details open><summary>Config</summary>
-
-```yaml
-jobs:
- - name: local
- url: http://127.0.0.1/server-status?auto
- username: username
- password: password
-
-```
-</details>
-
-##### HTTPS with self-signed certificate
-
-Apache with enabled HTTPS and self-signed certificate.
-
-<details open><summary>Config</summary>
-
-```yaml
-jobs:
- - name: local
- url: https://127.0.0.1/server-status?auto
- tls_skip_verify: yes
-
-```
-</details>
-
-##### Multi-instance
-
-> **Note**: When you define multiple jobs, their names must be unique.
-
-Collecting metrics from local and remote instances.
-
-
-<details open><summary>Config</summary>
-
-```yaml
-jobs:
- - name: local
- url: http://127.0.0.1/server-status?auto
-
- - name: remote
- url: http://192.0.2.1/server-status?auto
-
-```
-</details>
-
-
-
-## Troubleshooting
-
-### Debug Mode
-
-To troubleshoot issues with the `apache` collector, run the `go.d.plugin` with the debug option enabled. The output
-should give you clues as to why the collector isn't working.
-
-- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
- your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
-
- ```bash
- cd /usr/libexec/netdata/plugins.d/
- ```
-
-- Switch to the `netdata` user.
-
- ```bash
- sudo -u netdata -s
- ```
-
-- Run the `go.d.plugin` to debug the collector:
-
- ```bash
- ./go.d.plugin -d -m apache
- ```
-
-
diff --git a/src/go/collectors/go.d.plugin/modules/apache/integrations/httpd.md b/src/go/collectors/go.d.plugin/modules/apache/integrations/httpd.md
deleted file mode 100644
index 000d9b604..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/integrations/httpd.md
+++ /dev/null
@@ -1,238 +0,0 @@
-<!--startmeta
-custom_edit_url: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/apache/integrations/httpd.md"
-meta_yaml: "https://github.com/netdata/netdata/edit/master/src/go/collectors/go.d.plugin/modules/apache/metadata.yaml"
-sidebar_label: "HTTPD"
-learn_status: "Published"
-learn_rel_path: "Collecting Metrics/Web Servers and Web Proxies"
-most_popular: True
-message: "DO NOT EDIT THIS FILE DIRECTLY, IT IS GENERATED BY THE COLLECTOR'S metadata.yaml FILE"
-endmeta-->
-
-# HTTPD
-
-
-<img src="https://netdata.cloud/img/apache.svg" width="150"/>
-
-
-Plugin: go.d.plugin
-Module: apache
-
-<img src="https://img.shields.io/badge/maintained%20by-Netdata-%2300ab44" />
-
-## Overview
-
-This collector monitors the activity and performance of Apache servers, and collects metrics such as the number of connections, workers, requests and more.
-
-
-It sends HTTP requests to the Apache location [server-status](https://httpd.apache.org/docs/2.4/mod/mod_status.html),
-which is a built-in location that provides metrics about the Apache server.
-
-
-This collector is supported on all platforms.
-
-This collector supports collecting metrics from multiple instances of this integration, including remote instances.
-
-
-### Default Behavior
-
-#### Auto-Detection
-
-By default, it detects Apache instances running on localhost that are listening on port 80.
-On startup, it tries to collect metrics from:
-
-- http://localhost/server-status?auto
-- http://127.0.0.1/server-status?auto
-
-
-#### Limits
-
-The default configuration for this integration does not impose any limits on data collection.
-
-#### Performance Impact
-
-The default configuration for this integration is not expected to impose a significant performance impact on the system.
-
-
-## Metrics
-
-Metrics grouped by *scope*.
-
-The scope defines the instance that the metric belongs to. An instance is uniquely identified by a set of labels.
-
-All metrics available only if [ExtendedStatus](https://httpd.apache.org/docs/2.4/mod/core.html#extendedstatus) is on.
-
-
-### Per Apache instance
-
-These metrics refer to the entire monitored application.
-
-This scope has no labels.
-
-Metrics:
-
-| Metric | Dimensions | Unit | Basic | Extended |
-|:------|:----------|:----|:---:|:---:|
-| apache.connections | connections | connections | • | • |
-| apache.conns_async | keepalive, closing, writing | connections | • | • |
-| apache.workers | idle, busy | workers | • | • |
-| apache.scoreboard | waiting, starting, reading, sending, keepalive, dns_lookup, closing, logging, finishing, idle_cleanup, open | connections | • | • |
-| apache.requests | requests | requests/s | | • |
-| apache.net | sent | kilobit/s | | • |
-| apache.reqpersec | requests | requests/s | | • |
-| apache.bytespersec | served | KiB/s | | • |
-| apache.bytesperreq | size | KiB | | • |
-| apache.uptime | uptime | seconds | | • |
-
-
-
-## Alerts
-
-There are no alerts configured by default for this integration.
-
-
-## Setup
-
-### Prerequisites
-
-#### Enable Apache status support
-
-- Enable and configure [status_module](https://httpd.apache.org/docs/2.4/mod/mod_status.html).
-- Ensure that you have [ExtendedStatus](https://httpd.apache.org/docs/2.4/mod/mod_status.html#troubleshoot) set on (enabled by default since Apache v2.3.6).
-
-
-
-### Configuration
-
-#### File
-
-The configuration file name for this integration is `go.d/apache.conf`.
-
-
-You can edit the configuration file using the `edit-config` script from the
-Netdata [config directory](/docs/netdata-agent/configuration/README.md#the-netdata-config-directory).
-
-```bash
-cd /etc/netdata 2>/dev/null || cd /opt/netdata/etc/netdata
-sudo ./edit-config go.d/apache.conf
-```
-#### Options
-
-The following options can be defined globally: update_every, autodetection_retry.
-
-
-<details open><summary>Config options</summary>
-
-| Name | Description | Default | Required |
-|:----|:-----------|:-------|:--------:|
-| update_every | Data collection frequency. | 1 | no |
-| autodetection_retry | Recheck interval in seconds. Zero means no recheck will be scheduled. | 0 | no |
-| url | Server URL. | http://127.0.0.1/server-status?auto | yes |
-| timeout | HTTP request timeout. | 1 | no |
-| username | Username for basic HTTP authentication. | | no |
-| password | Password for basic HTTP authentication. | | no |
-| proxy_url | Proxy URL. | | no |
-| proxy_username | Username for proxy basic HTTP authentication. | | no |
-| proxy_password | Password for proxy basic HTTP authentication. | | no |
-| method | HTTP request method. | GET | no |
-| body | HTTP request body. | | no |
-| headers | HTTP request headers. | | no |
-| not_follow_redirects | Redirect handling policy. Controls whether the client follows redirects. | no | no |
-| tls_skip_verify | Server certificate chain and hostname validation policy. Controls whether the client performs this check. | no | no |
-| tls_ca | Certification authority that the client uses when verifying the server's certificates. | | no |
-| tls_cert | Client TLS certificate. | | no |
-| tls_key | Client TLS key. | | no |
-
-</details>
-
-#### Examples
-
-##### Basic
-
-A basic example configuration.
-
-```yaml
-jobs:
- - name: local
- url: http://127.0.0.1/server-status?auto
-
-```
-##### HTTP authentication
-
-Basic HTTP authentication.
-
-<details open><summary>Config</summary>
-
-```yaml
-jobs:
- - name: local
- url: http://127.0.0.1/server-status?auto
- username: username
- password: password
-
-```
-</details>
-
-##### HTTPS with self-signed certificate
-
-Apache with enabled HTTPS and self-signed certificate.
-
-<details open><summary>Config</summary>
-
-```yaml
-jobs:
- - name: local
- url: https://127.0.0.1/server-status?auto
- tls_skip_verify: yes
-
-```
-</details>
-
-##### Multi-instance
-
-> **Note**: When you define multiple jobs, their names must be unique.
-
-Collecting metrics from local and remote instances.
-
-
-<details open><summary>Config</summary>
-
-```yaml
-jobs:
- - name: local
- url: http://127.0.0.1/server-status?auto
-
- - name: remote
- url: http://192.0.2.1/server-status?auto
-
-```
-</details>
-
-
-
-## Troubleshooting
-
-### Debug Mode
-
-To troubleshoot issues with the `apache` collector, run the `go.d.plugin` with the debug option enabled. The output
-should give you clues as to why the collector isn't working.
-
-- Navigate to the `plugins.d` directory, usually at `/usr/libexec/netdata/plugins.d/`. If that's not the case on
- your system, open `netdata.conf` and look for the `plugins` setting under `[directories]`.
-
- ```bash
- cd /usr/libexec/netdata/plugins.d/
- ```
-
-- Switch to the `netdata` user.
-
- ```bash
- sudo -u netdata -s
- ```
-
-- Run the `go.d.plugin` to debug the collector:
-
- ```bash
- ./go.d.plugin -d -m apache
- ```
-
-
diff --git a/src/go/collectors/go.d.plugin/modules/apache/metadata.yaml b/src/go/collectors/go.d.plugin/modules/apache/metadata.yaml
deleted file mode 100644
index bfab73fcf..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/metadata.yaml
+++ /dev/null
@@ -1,302 +0,0 @@
-plugin_name: go.d.plugin
-modules:
- - &module
- meta: &meta
- id: collector-go.d.plugin-apache
- plugin_name: go.d.plugin
- module_name: apache
- monitored_instance:
- name: Apache
- link: https://httpd.apache.org/
- icon_filename: apache.svg
- categories:
- - data-collection.web-servers-and-web-proxies
- keywords:
- - webserver
- related_resources:
- integrations:
- list:
- - plugin_name: go.d.plugin
- module_name: weblog
- - plugin_name: go.d.plugin
- module_name: httpcheck
- - plugin_name: apps.plugin
- module_name: apps
- info_provided_to_referring_integrations:
- description: ""
- most_popular: true
- overview:
- data_collection:
- metrics_description: |
- This collector monitors the activity and performance of Apache servers, and collects metrics such as the number of connections, workers, requests and more.
- method_description: |
- It sends HTTP requests to the Apache location [server-status](https://httpd.apache.org/docs/2.4/mod/mod_status.html),
- which is a built-in location that provides metrics about the Apache server.
- supported_platforms:
- include: []
- exclude: []
- multi_instance: true
- additional_permissions:
- description: ""
- default_behavior:
- auto_detection:
- description: |
- By default, it detects Apache instances running on localhost that are listening on port 80.
- On startup, it tries to collect metrics from:
-
- - http://localhost/server-status?auto
- - http://127.0.0.1/server-status?auto
- limits:
- description: ""
- performance_impact:
- description: ""
- setup:
- prerequisites:
- list:
- - title: Enable Apache status support
- description: |
- - Enable and configure [status_module](https://httpd.apache.org/docs/2.4/mod/mod_status.html).
- - Ensure that you have [ExtendedStatus](https://httpd.apache.org/docs/2.4/mod/mod_status.html#troubleshoot) set on (enabled by default since Apache v2.3.6).
- configuration:
- file:
- name: go.d/apache.conf
- options:
- description: |
- The following options can be defined globally: update_every, autodetection_retry.
- folding:
- title: Config options
- enabled: true
- list:
- - name: update_every
- description: Data collection frequency.
- default_value: 1
- required: false
- - name: autodetection_retry
- description: Recheck interval in seconds. Zero means no recheck will be scheduled.
- default_value: 0
- required: false
- - name: url
- description: Server URL.
- default_value: http://127.0.0.1/server-status?auto
- required: true
- - name: timeout
- description: HTTP request timeout.
- default_value: 1
- required: false
- - name: username
- description: Username for basic HTTP authentication.
- default_value: ""
- required: false
- - name: password
- description: Password for basic HTTP authentication.
- default_value: ""
- required: false
- - name: proxy_url
- description: Proxy URL.
- default_value: ""
- required: false
- - name: proxy_username
- description: Username for proxy basic HTTP authentication.
- default_value: ""
- required: false
- - name: proxy_password
- description: Password for proxy basic HTTP authentication.
- default_value: ""
- required: false
- - name: method
- description: HTTP request method.
- default_value: "GET"
- required: false
- - name: body
- description: HTTP request body.
- default_value: ""
- required: false
- - name: headers
- description: HTTP request headers.
- default_value: ""
- required: false
- - name: not_follow_redirects
- description: Redirect handling policy. Controls whether the client follows redirects.
- default_value: no
- required: false
- - name: tls_skip_verify
- description: Server certificate chain and hostname validation policy. Controls whether the client performs this check.
- default_value: no
- required: false
- - name: tls_ca
- description: Certification authority that the client uses when verifying the server's certificates.
- default_value: ""
- required: false
- - name: tls_cert
- description: Client TLS certificate.
- default_value: ""
- required: false
- - name: tls_key
- description: Client TLS key.
- default_value: ""
- required: false
- examples:
- folding:
- title: Config
- enabled: true
- list:
- - name: Basic
- folding:
- enabled: false
- description: A basic example configuration.
- config: |
- jobs:
- - name: local
- url: http://127.0.0.1/server-status?auto
- - name: HTTP authentication
- description: Basic HTTP authentication.
- config: |
- jobs:
- - name: local
- url: http://127.0.0.1/server-status?auto
- username: username
- password: password
- - name: HTTPS with self-signed certificate
- description: Apache with enabled HTTPS and self-signed certificate.
- config: |
- jobs:
- - name: local
- url: https://127.0.0.1/server-status?auto
- tls_skip_verify: yes
- - name: Multi-instance
- description: |
- > **Note**: When you define multiple jobs, their names must be unique.
-
- Collecting metrics from local and remote instances.
- config: |
- jobs:
- - name: local
- url: http://127.0.0.1/server-status?auto
-
- - name: remote
- url: http://192.0.2.1/server-status?auto
- troubleshooting:
- problems:
- list: []
- alerts: []
- metrics:
- folding:
- title: Metrics
- enabled: false
- description: |
- All metrics available only if [ExtendedStatus](https://httpd.apache.org/docs/2.4/mod/core.html#extendedstatus) is on.
- availability:
- - Basic
- - Extended
- scopes:
- - name: global
- description: These metrics refer to the entire monitored application.
- labels: []
- metrics:
- - name: apache.connections
- availability:
- - Basic
- - Extended
- description: Connections
- unit: connections
- chart_type: line
- dimensions:
- - name: connections
- - name: apache.conns_async
- availability:
- - Basic
- - Extended
- description: Active Connections
- unit: connections
- chart_type: stacked
- dimensions:
- - name: keepalive
- - name: closing
- - name: writing
- - name: apache.workers
- availability:
- - Basic
- - Extended
- description: Workers Threads
- unit: workers
- chart_type: stacked
- dimensions:
- - name: idle
- - name: busy
- - name: apache.scoreboard
- availability:
- - Basic
- - Extended
- description: Scoreboard
- unit: connections
- chart_type: line
- dimensions:
- - name: waiting
- - name: starting
- - name: reading
- - name: sending
- - name: keepalive
- - name: dns_lookup
- - name: closing
- - name: logging
- - name: finishing
- - name: idle_cleanup
- - name: open
- - name: apache.requests
- availability:
- - Extended
- description: Requests
- unit: requests/s
- chart_type: line
- dimensions:
- - name: requests
- - name: apache.net
- availability:
- - Extended
- description: Bandwidth
- unit: kilobit/s
- chart_type: area
- dimensions:
- - name: sent
- - name: apache.reqpersec
- availability:
- - Extended
- description: Lifetime Average Number Of Requests Per Second
- unit: requests/s
- chart_type: area
- dimensions:
- - name: requests
- - name: apache.bytespersec
- availability:
- - Extended
- description: Lifetime Average Number Of Bytes Served Per Second
- unit: KiB/s
- chart_type: area
- dimensions:
- - name: served
- - name: apache.bytesperreq
- availability:
- - Extended
- description: Lifetime Average Response Size
- unit: KiB
- chart_type: area
- dimensions:
- - name: size
- - name: apache.uptime
- availability:
- - Extended
- description: Uptime
- unit: seconds
- chart_type: line
- dimensions:
- - name: uptime
- - <<: *module
- meta:
- <<: *meta
- id: collector-go.d.plugin-httpd
- monitored_instance:
- name: HTTPD
- link: https://httpd.apache.org/
- icon_filename: apache.svg
- categories:
- - data-collection.web-servers-and-web-proxies
diff --git a/src/go/collectors/go.d.plugin/modules/apache/metrics.go b/src/go/collectors/go.d.plugin/modules/apache/metrics.go
deleted file mode 100644
index 953bd42c3..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/metrics.go
+++ /dev/null
@@ -1,61 +0,0 @@
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-package apache
-
-type (
- serverStatus struct {
- // ExtendedStatus
- Total struct {
- // Total number of accesses.
- Accesses *int64 `stm:"accesses"`
- // Total number of byte count served.
- // This metric reflects the bytes that should have been served,
- // which is not necessarily equal to the bytes actually (successfully) served.
- KBytes *int64 `stm:"kBytes"`
- } `stm:"total"`
- Averages struct {
- //Average number of requests per second.
- ReqPerSec *float64 `stm:"req_per_sec,100000,1"`
- // Average number of bytes served per second.
- BytesPerSec *float64 `stm:"bytes_per_sec,100000,1"`
- // Average number of bytes per request.
- BytesPerReq *float64 `stm:"bytes_per_req,100000,1"`
- } `stm:""`
- Uptime *int64 `stm:"uptime"`
-
- Workers struct {
- // Total number of busy worker threads/processes.
- // A worker is considered “busy” if it is in any of the following states:
- // reading, writing, keep-alive, logging, closing, or gracefully finishing.
- Busy *int64 `stm:"busy_workers"`
- // Total number of idle worker threads/processes.
- // An “idle” worker is not in any of the busy states.
- Idle *int64 `stm:"idle_workers"`
- } `stm:""`
- Connections struct {
- Total *int64 `stm:"total"`
- Async struct {
- // Number of async connections in writing state (only applicable to event MPM).
- Writing *int64 `stm:"writing"`
- // Number of async connections in keep-alive state (only applicable to event MPM).
- KeepAlive *int64 `stm:"keep_alive"`
- // Number of async connections in closing state (only applicable to event MPM).
- Closing *int64 `stm:"closing"`
- } `stm:"async"`
- } `stm:"conns"`
- Scoreboard *scoreboard `stm:"scoreboard"`
- }
- scoreboard struct {
- Waiting int64 `stm:"waiting"`
- Starting int64 `stm:"starting"`
- Reading int64 `stm:"reading"`
- Sending int64 `stm:"sending"`
- KeepAlive int64 `stm:"keepalive"`
- DNSLookup int64 `stm:"dns_lookup"`
- Closing int64 `stm:"closing"`
- Logging int64 `stm:"logging"`
- Finishing int64 `stm:"finishing"`
- IdleCleanup int64 `stm:"idle_cleanup"`
- Open int64 `stm:"open"`
- }
-)
diff --git a/src/go/collectors/go.d.plugin/modules/apache/testdata/config.json b/src/go/collectors/go.d.plugin/modules/apache/testdata/config.json
deleted file mode 100644
index 984c3ed6e..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/testdata/config.json
+++ /dev/null
@@ -1,20 +0,0 @@
-{
- "update_every": 123,
- "url": "ok",
- "body": "ok",
- "method": "ok",
- "headers": {
- "ok": "ok"
- },
- "username": "ok",
- "password": "ok",
- "proxy_url": "ok",
- "proxy_username": "ok",
- "proxy_password": "ok",
- "timeout": 123.123,
- "not_follow_redirects": true,
- "tls_ca": "ok",
- "tls_cert": "ok",
- "tls_key": "ok",
- "tls_skip_verify": true
-}
diff --git a/src/go/collectors/go.d.plugin/modules/apache/testdata/config.yaml b/src/go/collectors/go.d.plugin/modules/apache/testdata/config.yaml
deleted file mode 100644
index 8558b61cc..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/testdata/config.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
-update_every: 123
-url: "ok"
-body: "ok"
-method: "ok"
-headers:
- ok: "ok"
-username: "ok"
-password: "ok"
-proxy_url: "ok"
-proxy_username: "ok"
-proxy_password: "ok"
-timeout: 123.123
-not_follow_redirects: yes
-tls_ca: "ok"
-tls_cert: "ok"
-tls_key: "ok"
-tls_skip_verify: yes
diff --git a/src/go/collectors/go.d.plugin/modules/apache/testdata/extended-status-mpm-event.txt b/src/go/collectors/go.d.plugin/modules/apache/testdata/extended-status-mpm-event.txt
deleted file mode 100644
index 136b69363..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/testdata/extended-status-mpm-event.txt
+++ /dev/null
@@ -1,39 +0,0 @@
-127.0.0.1
-ServerVersion: Apache/2.4.37 (Unix)
-ServerMPM: event
-Server Built: Oct 23 2018 18:27:46
-CurrentTime: Sunday, 13-Jan-2019 20:39:30 MSK
-RestartTime: Sunday, 13-Jan-2019 20:35:13 MSK
-ParentServerConfigGeneration: 1
-ParentServerMPMGeneration: 0
-ServerUptimeSeconds: 256
-ServerUptime: 4 minutes 16 seconds
-Load1: 1.02
-Load5: 1.30
-Load15: 1.41
-Total Accesses: 9
-Total kBytes: 12
-Total Duration: 1
-CPUUser: 0
-CPUSystem: .01
-CPUChildrenUser: 0
-CPUChildrenSystem: 0
-CPULoad: .00390625
-Uptime: 256
-ReqPerSec: .0351563
-BytesPerSec: 48
-BytesPerReq: 1365.33
-DurationPerReq: .111111
-BusyWorkers: 1
-IdleWorkers: 99
-Processes: 4
-Stopping: 0
-BusyWorkers: 1
-IdleWorkers: 99
-ConnsTotal: 0
-ConnsAsyncWriting: 0
-ConnsAsyncKeepAlive: 0
-ConnsAsyncClosing: 0
-Scoreboard: ____________________________________________________________W_______________________________________............................................................................................................................................................................................................................................................................................................
-Using GnuTLS version: 3.6.5
-Built against GnuTLS version: 3.5.19 \ No newline at end of file
diff --git a/src/go/collectors/go.d.plugin/modules/apache/testdata/extended-status-mpm-prefork.txt b/src/go/collectors/go.d.plugin/modules/apache/testdata/extended-status-mpm-prefork.txt
deleted file mode 100644
index eeafb4983..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/testdata/extended-status-mpm-prefork.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-some.host.name
-ServerVersion: Apache/2.4.53 (Unix) OpenSSL/1.1.1
-ServerMPM: prefork
-Server Built: Apr 6 2022 16:30:59
-CurrentTime: Monday, 18-Apr-2022 11:52:39 CEST
-RestartTime: Sunday, 10-Apr-2022 06:57:34 CEST
-ParentServerConfigGeneration: 9
-ParentServerMPMGeneration: 8
-ServerUptimeSeconds: 708904
-ServerUptime: 8 days 4 hours 55 minutes 4 seconds
-Load1: 7.18
-Load5: 7.29
-Load15: 8.25
-Total Accesses: 120358784
-Total kBytes: 4252382776
-Total Duration: 35583107177
-CPUUser: 4549.96
-CPUSystem: 4142.92
-CPUChildrenUser: 776666
-CPUChildrenSystem: 609619
-CPULoad: 196.78
-Uptime: 708904
-ReqPerSec: 169.781
-BytesPerSec: 6142500
-BytesPerReq: 36178.8
-DurationPerReq: 295.642
-BusyWorkers: 70
-IdleWorkers: 1037
-Scoreboard: ___...
-TLSSessionCacheStatus
-CacheType: SHMCB
-CacheSharedMemory: 512000
-CacheCurrentEntries: 1969
-CacheSubcaches: 32
-CacheIndexesPerSubcaches: 88
-CacheTimeLeftOldestAvg: 295
-CacheTimeLeftOldestMin: 295
-CacheTimeLeftOldestMax: 296
-CacheIndexUsage: 69%
-CacheUsage: 99%
-CacheStoreCount: 22984008
-CacheReplaceCount: 0
-CacheExpireCount: 0
-CacheDiscardCount: 22976594
-CacheRetrieveHitCount: 5501
-CacheRetrieveMissCount: 4630
-CacheRemoveHitCount: 5491
-CacheRemoveMissCount: 51 \ No newline at end of file
diff --git a/src/go/collectors/go.d.plugin/modules/apache/testdata/lighttpd-status.txt b/src/go/collectors/go.d.plugin/modules/apache/testdata/lighttpd-status.txt
deleted file mode 100644
index 07d8e06e8..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/testdata/lighttpd-status.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Total Accesses: 12
-Total kBytes: 4
-Uptime: 11
-BusyServers: 3
-IdleServers: 125
-Scoreboard: khr_____________________________________________________________________________________________________________________________ \ No newline at end of file
diff --git a/src/go/collectors/go.d.plugin/modules/apache/testdata/simple-status-mpm-event.txt b/src/go/collectors/go.d.plugin/modules/apache/testdata/simple-status-mpm-event.txt
deleted file mode 100644
index 8093eacf9..000000000
--- a/src/go/collectors/go.d.plugin/modules/apache/testdata/simple-status-mpm-event.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-127.0.0.1
-ServerVersion: Apache/2.4.37 (Unix)
-ServerMPM: event
-Server Built: Oct 23 2018 18:27:46
-CurrentTime: Sunday, 13-Jan-2019 21:43:56 MSK
-RestartTime: Sunday, 13-Jan-2019 21:43:53 MSK
-ParentServerConfigGeneration: 1
-ParentServerMPMGeneration: 0
-ServerUptimeSeconds: 2
-ServerUptime: 2 seconds
-Load1: 0.77
-Load5: 0.93
-Load15: 1.03
-BusyWorkers: 1
-IdleWorkers: 74
-Processes: 3
-Stopping: 0
-BusyWorkers: 1
-IdleWorkers: 74
-ConnsTotal: 0
-ConnsAsyncWriting: 0
-ConnsAsyncKeepAlive: 0
-ConnsAsyncClosing: 0
-Scoreboard: ________________________________________________________________W__________..................................................................................................................................................................................................................................................................................................................................... \ No newline at end of file