我试着添加Rook和PostgreSQL的出口器
这篇文章是2018年PostgreSQL on Kubernetes Advent Calendar的第19天。
昨天我们尝试在PostgreSQL on Kubernetes环境中添加了Prometheus和Grafana来进行监控。
诚实地说,这次确实相当艰难。在Prometheus的跨命名空间监控方面,有很多案例,但实际尝试时往往不容易成功。
简而言之
-
- 今日は失敗事例。
- PrometheusのNamespaceではまってます
增加对Rook/Ceph的监控
Rook在意识到Ceph的监控,并在GitHub上准备了一个名为”monitoring”的目录。
基本上,只需要在monitoring目录中创建一个Prometheus操作员并启动Prometheus本身即可,但我们已经在#18中完成了这一步骤。因此,本次我们将使用现有的Prometheus操作员。
-
- Rook/CephのServiceMonitorを追加する。
- PostgreSQLのexporterとそれを取り込むServiceMonitorを追加する。
我打算试试(做) 。
添加ServiceMonitor
以下是位于rook的gituhub上的ServiceMonitor,请将其改写为之前构建的Prometheus版本。
以下是Rook的gituhub中的ServiceMonitor文件,现在需要将其更改为之前为Prometheus构建的版本。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: pg-rook-ceph-mgr
namespace: monitoring
labels:
prometheus: pg
app: rook-ceph-mgr
spec:
namespaceSelector:
matchNames:
- rook-ceph
selector:
matchLabels:
app: rook-ceph-mgr
rook_cluster: rook-ceph
endpoints:
- port: http-metrics
path: /metrics
interval: 5s
我的意思是如下。
-
- ServiceMonitorのpg-rook-ceph-mgrはPrometheusと同じNamespace:monitoringとする。
- spec以下はrook-ceph-mgrのポッド配置とあわせて、Namespace:rook-cephとする。
Prometheus与其他系统无法完美协同。
然而,如果在这种情况下通过Prometheus的用户界面进行确认,结果如下。
-
- Service Discoveryでpg-rook-ceph-mgrは1つ見つかっている状態。
- Targetsで見るとrook-ceph-mgrはstate:DOWNになっている。
Endpoint 的地址是 http://:9283/metrics,看起来没有问题,而且使用curl命令也可以获取到metrics数据。
在进行了各种调查之后,我发现在Prometheus的Github上有许多与Namespace有关的问题,并且还有这样的文档。但是,我目前还不清楚如何具体添加Namespace。
只能无奈地改变Prometheus一侧的命名空间。
正如这篇文章所提到的,我觉得使用ClusterRole可能能解决问题,所以尝试了很多方法,但是效果不太好。
为了解决问题,我尝试更改了命名空间。
首先,我会使用helm delete –purge命令删除昨天安装的环境。
然后,更改Namespace并重新安装。
$ helm install coreos/prometheus-operator --name pg-op --namespace rook-ceph -f prometheus-operator-value.yaml
$ helm install coreos/kube-prometheus --name pg --namespace rook-ceph -f kube-prometheus-value.yaml
# 結果はこうなる
$ helm ls
NAME REVISION UPDATED STATUS CHART APP VERSION NAMESPACE
pg 1 Fri Dec 21 14:36:23 2018 DEPLOYED kube-prometheus-0.0.105 rook-ceph
pg-op 1 Fri Dec 21 14:33:39 2018 DEPLOYED prometheus-operator-0.0.29 0.20.0 rook-ceph
在这种情况下,Prometheus的目标也变为State:UP。看起来这是一个与命名空间有关的确定问题。
导入Rook/Ceph的Grafana仪表板
一旦到这一步,Grafana的设置就很简单了。
我们将在昨天创建的Grafana中添加Ceph的仪表板。请参考此处。
添加对PostgreSQL的监控
PostgreSQL也有适用于Prometheus的exporter。你可以试试这个helm chart来使用它。
安装 Prometheus-Postgres-Exporter。
用 Helm 进行安装也适用于这里。
同样,虽然也存在命名空间的问题,但暂时将其安装在已经构建了 PostgreSQL 的默认目标位置上。
$helm install --name pg-postgres --set serviceAccount.name=postgres stable/prometheus-postgres-exporter -f pg-rook-sf-exporter-value.yaml
$ kubectl apply -f pg-rook-sf-exporter-monitor.yaml
然而,这里也遇到了Rook/Ceph相同的问题。
-
- Service Discoveryでpg-postgres-exporterは1つ見つかっている状態。
- Targetsで見るとpg-postgres-prometheus-postgres-exporterはstate:DOWNになっている。
在之前的Prometheus文件中,
默认情况下,Prometheus服务器仅限于三个必需的命名空间:default、kube-system和通过$._config.namespace进行堆栈配置运行的命名空间。
因为写着这样,所以我以为默认值没问题,但结果不行。如果能突破这一点,我觉得Grafana会很简单,但今天我放弃了。
概括
遗憾的是,Prometheus的监控不能按照预期的方式进行。实际上,我本打算尝试使用Prometheus+Grafana以及ElasticSearch+Kibana这两种与Kubernetes常常搭配使用的工具组合,但是并不那么容易呢。
我想再多学一些,然后再进行战斗。请多关照。