Overview
What gets installed
Monitoring ships as one Helm release named monitoring, built on kube-prometheus-stack 87.19.2. Three tools do the work you will actually interact with; the rest feed them data.
Grafana
Dashboards and graphs. This is where you look at the health of the platform day to day.
Alertmanager
Sends you email when something needs attention.
Every component
PrometheusCollects and stores metrics from the cluster and from NetLiNQ services.AlertmanagerSends alert email when a rule fires.GrafanaDashboards and graphs, backed by the EMS PostgreSQL database.kube-state-metricsReports the state of Kubernetes objects such as pods and deployments.node-exporterReports CPU, memory, disk and network for each server.prometheus-operatorManages the Prometheus and Alertmanager instances.es-exporterExposes Elasticsearch health as metrics. Installed as its own release.jsonScrapes NetLiNQ JSON metric endpoints. Installed as its own release.Where things run
Everything runs in the monitoring namespace — except Grafana, which runs in netlinq.
grafana, grafana-headless
netlinq
prometheus-server, alertmanager
monitoring
kube-state-metrics, node-exporter
monitoring
Grafana deliberately stays in netlinq so the existing secrets, database mounts and web routes keep working unchanged. This is expected, not a misconfiguration.
Step 1
Before you start
Deploy monitoring after NetLiNQ EMS and PostgreSQL are running. Grafana keeps its dashboards, users and datasources in the EMS PostgreSQL database, so that database has to exist first.
ImagePullBackOff until the internal image mirror lists are updated. Check with BLiNQ before deploying in a disconnected environment.Step 2
Deploy monitoring
$ cd blinq-ems-autom-configs/monitoring $ source deploy_monitoring.sh
source, not bash. The script reads your web address, device IP, setup type and SMTP settings from the shell. Running it with bash starts a new shell, those values are lost, and the deploy ends up misconfigured.What the script does
singlenode_demo, resource requests are halved automatically.Step 3
Reach the tools
Grafana is published at the grafana subdomain of the web address you set during installation.
https://grafana.<your endpoint> # e.g. endpoint ems.example.org becomes https://grafana.ems.example.org
Prometheus and Alertmanager are published through the platform's web routes rather than by the monitoring package itself. List the exact addresses, then add the ones you need to your DNS.
$ kubectl get httproutes -A
Signing in to Grafana
Grafana uses a generated administrator account held in the internal-grafana secret. Retrieve it with secretsctl — the same tool you used during installation — or read it straight from the cluster.
$ secretsctl ui # open the Internal section, then Reveal
$ kubectl get secret internal-grafana -n netlinq \ -o jsonpath='{.data.grafana-username}' | base64 -d; echo $ kubectl get secret internal-grafana -n netlinq \ -o jsonpath='{.data.grafana-password}' | base64 -d; echo
Step 4
Dashboards
NetLiNQ ships six custom dashboards, plus 29 standard Kubernetes dashboards from the upstream project.
Cluster monitoringOverall cluster health, node and pod resource use.Certificate expirationCertificates approaching expiry.ElasticsearchElasticsearch cluster health, indices and storage.PostgreSQLDatabase connections, queries and performance.Akka / KamonNetLiNQ application internals and message throughput.Spark / KamonDevice-facing service metrics.Add your own dashboard
Export the dashboard as JSON from Grafana, drop it into the dashboards folder, then re-apply.
$ cp my-dashboard.json blinq-ems-autom-configs/monitoring/grafana/dashboards/ $ cd blinq-ems-autom-configs/monitoring $ ./apply_grafana_dashboards.sh
Step 5
Alert email
Alertmanager sends email using the SMTP details collected during installation.
Alert routing and recipients live under alertmanager.config in monitoring/values.yaml. After editing, run the deploy command again.
Step 6
Data retention
Prometheus metrics15 days by default. Change prometheus.prometheusSpec.retention in monitoring/values.yaml.Elasticsearch indices14 days by default. Change retention_realtime in netlinq_onprem_install.vars.Grafana contentDashboards and users are kept indefinitely in the EMS PostgreSQL database.Prometheus storage size is set by prometheus.prometheusSpec.storageSpec. Increase the retention period and the volume size together — a longer retention on an unchanged volume simply fills up and starts dropping the oldest data.
Step 7
Common tasks
Check that monitoring is healthy
$ kubectl get pods -n monitoring $ kubectl get pods -n netlinq -l app.kubernetes.io/name=grafana
Every pod should be Running or Completed.
Add a metrics target
Add it under prometheus.prometheusSpec.additionalScrapeConfigs in monitoring/values.yaml, then redeploy.
prometheus: prometheusSpec: additionalScrapeConfigs: | - job_name: my-exporter static_configs: - targets: - my-exporter.netlinq.svc.cluster.local:9100
Reinstall or remove monitoring
$ ./reinstall_monitoring.sh # remove, then deploy again $ ./uninstall_monitoring.sh # interactive, keeps stored data $ ./uninstall_monitoring.sh -y # no prompts, keeps stored data $ ./uninstall_monitoring.sh -y --delete-pvc # also deletes stored metrics
Help
Troubleshooting
Monitoring pods stuck in ImagePullBackOff›
Grafana redirects to the wrong address›
endpoint was correct when you deployed, then redeploy monitoring.No alert email arriving›
A new dashboard does not appear›
./apply_grafana_dashboards.sh and confirm the JSON file is valid. Provisioned dashboards can take a few seconds to be picked up.Prometheus history disappeared›
--delete-pvc. Metric history cannot be recovered.Errors about Prometheus custom resources after an upgrade›
Grafana pod will not start›
netlinq namespace. Grafana depends on it for dashboards, users and datasources.Reference
At a glance
Helm releasemonitoringChartkube-prometheus-stack 87.19.2Stack namespacemonitoringGrafana namespacenetlinqGrafana addresshttps://grafana.<your endpoint>Grafana credentialsinternal-grafana secret in netlinqPrometheus retention15 daysDashboards6 custom, plus 29 upstreamExtra releaseses-exporter, json