@leverege/build-tools 2.66.1 → 2.66.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -5
- package/src/bash-funcs +11 -0
- package/src/helm-audit.mjs +116 -0
- package/src/helm-charts/api-server/values-local.yaml +4 -1
- package/src/helm-charts/authz-server/values-local.yaml +3 -0
- package/src/helm-charts/cnpg-db-pgbench/cluster.yaml.ovh +2 -0
- package/src/helm-charts/cnpg-db-tsdb-basic/cluster.yaml.ovh +3 -1
- package/src/helm-charts/cnpg-db-tsdb-dense/cluster.yaml.ovh +2 -0
- package/src/helm-charts/elasticsearch8/helmup.plugin +1 -1
- package/src/helm-charts/emailer/values-local.yaml +6 -3
- package/src/helm-charts/geotile-server/values-local.yaml +6 -3
- package/src/helm-charts/imagine/values-local.yaml +3 -0
- package/src/helm-charts/message-processor/values-local.yaml +1 -1
- package/src/helm-charts/messenger/values-local.yaml +4 -1
- package/src/helm-charts/overdose/values-local.yaml +3 -0
- package/src/helm-charts/prom-operator/prometheus-stack.yaml.ovh +1 -1
- package/src/helm-charts/prom-operator/rules/cadvisor-rules.yaml +3 -3
- package/src/helm-charts/prom-operator/rules/cnpg-rules.yaml +3 -2
- package/src/helm-charts/prom-operator/rules/elasticsearch-rules.yaml +2 -2
- package/src/helm-charts/prom-operator/rules/gcp-rules.yaml +2 -2
- package/src/helm-charts/prom-operator/rules/kubestate-rules.yaml +2 -2
- package/src/helm-charts/prom-operator/rules/po-k8s-selective.yaml +23 -0
- package/src/helm-charts/prom-operator/rules/prometheus-rules.yaml +2 -2
- package/src/helm-charts/prom-operator/rules/redis-rules.yaml +1 -1
- package/src/helm-charts/prom-operator/rules/traefik-rules.yaml +2 -2
- package/src/helm-charts/prom-operator/update-rules.sh +32 -0
- package/src/helm-charts/pubsub-pulse/values-local.yaml +4 -1
- package/src/helm-charts/pusher/values-local.yaml +3 -0
- package/src/helm-charts/reason/values-local.yaml +4 -1
- package/src/helm-charts/redis/.nohelm +0 -0
- package/src/helm-charts/redis/helmup.plugin +2 -2
- package/src/helm-charts/resource-server/values-local.yaml +9 -4
- package/src/helm-charts/rule-engine/values-local.yaml +3 -0
- package/src/helm-charts/traefik/.nohelm +0 -0
- package/src/helm-charts/traefik/helmup.plugin +1 -1
- package/src/helm-charts/transponder-bq/values-local.yaml +4 -1
- package/src/helm-charts/transponder-dh/values-local.yaml +4 -1
- package/src/helm-charts/transponder-rt/values-local.yaml +4 -1
- package/src/helm-charts/transponder-tsdb/values-local.yaml +4 -1
- package/src/helm-charts/velero/helmup.plugin +1 -1
- package/src/helm-charts/vin-decoder-server/values-local.yaml +3 -0
- package/src/helmup.sh +26 -4
- package/src/push-my-chart.mjs +17 -8
- package/src/awesome-fetch.mjs +0 -44
- package/src/helm-charts/prom-operator/apply-rules +0 -15
- package/src/helm-charts/prom-operator/gitignore +0 -2
- package/src/helm-charts/prom-operator/grafana-dashboards/cloudnative-pg.json +0 -9190
- package/src/helm-charts/prom-operator/grafana-dashboards/redis.json +0 -1513
- package/src/helm-charts/prom-operator/grafana-dashboards/stackdriver.json +0 -624
- package/src/helm-charts/prom-operator/grafana-dashboards/traefik-op.json +0 -1386
- package/src/helm-charts/prom-operator/rules/awesome-base/etcd-exporter.yaml +0 -153
- package/src/helm-charts/prom-operator/rules/etcd-rulte.yaml +0 -153
- /package/src/helm-charts/{cert-manager → deprecated/cert-manager}/.nohelm +0 -0
- /package/src/helm-charts/{cert-manager → deprecated/cert-manager}/cert-manager-local.yaml.ovh +0 -0
- /package/src/helm-charts/{cert-manager → deprecated/cert-manager}/gitignore +0 -0
- /package/src/helm-charts/{cert-manager → deprecated/cert-manager}/helmup.plugin +0 -0
- /package/src/helm-charts/{grafana → deprecated/grafana}/.nohelm +0 -0
- /package/src/helm-charts/{grafana → deprecated/grafana}/gitignore +0 -0
- /package/src/helm-charts/{grafana → deprecated/grafana}/grafana-local.yaml.ovh +0 -0
- /package/src/helm-charts/{grafana → deprecated/grafana}/helmup.plugin +0 -0
- /package/src/helm-charts/{postgres → deprecated/postgres}/.nohelm +0 -0
- /package/src/helm-charts/{postgres → deprecated/postgres}/helmup.plugin +0 -0
- /package/src/helm-charts/{postgres → deprecated/postgres}/postgres-local.yaml +0 -0
- /package/src/helm-charts/{prometheus → deprecated/prometheus}/helmup.plugin +0 -0
- /package/src/helm-charts/{prometheus → deprecated/prometheus}/values-local.yaml +0 -0
- /package/src/helm-charts/{stackdriver-exporter → deprecated/stackdriver-exporter}/helmup.plugin +0 -0
- /package/src/helm-charts/{stackdriver-exporter → deprecated/stackdriver-exporter}/values-local.yaml +0 -0
- /package/src/helm-charts/{timescale-db → deprecated/timescale-db}/.nohelm +0 -0
- /package/src/helm-charts/{timescale-db → deprecated/timescale-db}/helmup.plugin +0 -0
- /package/src/helm-charts/{timescale-db → deprecated/timescale-db}/timescale-db-local.yaml +0 -0
- /package/src/helm-charts/prom-operator/rules/{postgres-rules.yaml → postgres-rules.yaml.disabled} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@leverege/build-tools",
|
|
3
|
-
"version": "2.66.
|
|
3
|
+
"version": "2.66.3",
|
|
4
4
|
"description": "A collection of build / support tools for Leverege developers",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"repository": {
|
|
@@ -69,10 +69,10 @@
|
|
|
69
69
|
"deepmerge": "^4.3.1",
|
|
70
70
|
"enquirer": "^2.4.1",
|
|
71
71
|
"execa": "^9.5.2",
|
|
72
|
-
"glob": "^11.0.
|
|
72
|
+
"glob": "^11.0.2",
|
|
73
73
|
"handlebars": "^4.7.8",
|
|
74
|
-
"ignore": "^7.0.
|
|
75
|
-
"inquirer": "^12.
|
|
74
|
+
"ignore": "^7.0.4",
|
|
75
|
+
"inquirer": "^12.6.0",
|
|
76
76
|
"js-yaml": "^4.1.0",
|
|
77
77
|
"jsdoc": "^4.0.4",
|
|
78
78
|
"ms": "^2.1.3",
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
"semver": "^7.7.1",
|
|
84
84
|
"simple-git": "^3.27.0",
|
|
85
85
|
"toml": "^3.0.0",
|
|
86
|
-
"zx": "^8.5.
|
|
86
|
+
"zx": "^8.5.3"
|
|
87
87
|
},
|
|
88
88
|
"devDependencies": {
|
|
89
89
|
"@leverege/eslint-config-leverege": "^5.0.1",
|
package/src/bash-funcs
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
DEVNULL="/dev/null"
|
|
12
12
|
[ ! -z "$BUILD_TOOLS_DEBUG" ] && DEVNULL="/dev/stdout" && printf "\n***BUILD_TOOLS_DEBUG DEVNULL=>$DEVNULL\n"
|
|
13
13
|
|
|
14
|
+
GITTOP=`git rev-parse --show-toplevel`
|
|
14
15
|
DTS="`date +\"%Y%m%d-%H%M%S\"`"
|
|
15
16
|
|
|
16
17
|
# Simple ANSI color coded string generator.
|
|
@@ -214,3 +215,13 @@ PLUGIN_NOEXEC
|
|
|
214
215
|
sendToSlack "$PLUGIN"
|
|
215
216
|
return 0
|
|
216
217
|
}
|
|
218
|
+
|
|
219
|
+
# simple enforcement of necessary tools that need to be installed
|
|
220
|
+
function commandChecker() {
|
|
221
|
+
for cmd in "$@"; do
|
|
222
|
+
command -v "$cmd" &> $DEVNULL
|
|
223
|
+
exitOnError $? "the `color g $cmd` command is required but not installed please install it and try again"
|
|
224
|
+
done
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
commandChecker git helm kubectl service-man
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// helm-audit.mjs
|
|
4
|
+
// Node.js version of helm-audit.sh to display deployed chart/image/audit info
|
|
5
|
+
|
|
6
|
+
import { shellCmd, log, debug } from './Utils.mjs'
|
|
7
|
+
import ora from 'ora'
|
|
8
|
+
import pLimit from 'p-limit'
|
|
9
|
+
import chalk from 'chalk'
|
|
10
|
+
|
|
11
|
+
const spinner = ora('Gathering Helm release info...').start()
|
|
12
|
+
const limit = pLimit(5) // limit concurrent shellCmds to avoid API overload
|
|
13
|
+
const OMIT_NAMESPACES = new Set(['estafette'])
|
|
14
|
+
|
|
15
|
+
async function getHelmReleases() {
|
|
16
|
+
const json = await shellCmd('helm list -A -o json')
|
|
17
|
+
return JSON.parse(json).filter(r => !OMIT_NAMESPACES.has(r.namespace))
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
async function getDeployedImageTag(ns, release) {
|
|
21
|
+
try {
|
|
22
|
+
const image = await shellCmd(`kubectl get deployment -n ${ns} -l app.kubernetes.io/instance=${release} -o jsonpath={.items[0].spec.template.spec.containers[0].image}`)
|
|
23
|
+
const tag = image.trim().split(':')[1]
|
|
24
|
+
return tag && tag !== 'not found' ? tag : ''
|
|
25
|
+
} catch {
|
|
26
|
+
return ''
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async function getChartAppVersion(ns, release) {
|
|
31
|
+
try {
|
|
32
|
+
const metadata = await shellCmd(`helm get metadata ${release} -n ${ns}`)
|
|
33
|
+
const match = metadata.match(/^APP_VERSION:\s*(.*?)\s*$/m)
|
|
34
|
+
return match ? match[1].trim() : '(unknown)'
|
|
35
|
+
} catch {
|
|
36
|
+
return '(unknown)'
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async function getHelmValue(ns, release, key) {
|
|
41
|
+
try {
|
|
42
|
+
const values = await shellCmd(`helm get values ${release} -n ${ns} -o json`)
|
|
43
|
+
const parsed = JSON.parse(values)
|
|
44
|
+
return parsed.helmup?.[key] || ''
|
|
45
|
+
} catch {
|
|
46
|
+
return ''
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function normalizeTag(tag) {
|
|
51
|
+
return tag?.replace(/^v/, '').toLowerCase() || ''
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function formatRow(name, chartVersion, appVersion, imageTag, deployT, culprit) {
|
|
55
|
+
const release = chalk.green(name.slice(0, 25).padEnd(32))
|
|
56
|
+
const chartVer = chalk.cyan(chartVersion.padEnd(18))
|
|
57
|
+
const appVer = chalk.cyan(appVersion.padEnd(18))
|
|
58
|
+
const normApp = normalizeTag(appVersion)
|
|
59
|
+
const normImage = normalizeTag(imageTag)
|
|
60
|
+
|
|
61
|
+
let imageFormatted = imageTag.padEnd(20)
|
|
62
|
+
if (normImage && normApp && normImage === normApp) {
|
|
63
|
+
imageFormatted = chalk.green(imageFormatted)
|
|
64
|
+
} else if (imageTag) {
|
|
65
|
+
imageFormatted = chalk.red(imageFormatted)
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const deployInfo = deployT ? chalk.gray(`${deployT} by ${culprit || '(unknown)'}`) : ''
|
|
69
|
+
return ` ${release}${chartVer}${appVer}${imageFormatted}${deployInfo}`
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
async function audit() {
|
|
73
|
+
spinner.text = 'Fetching release metadata...'
|
|
74
|
+
const releases = await getHelmReleases()
|
|
75
|
+
|
|
76
|
+
// sort by namespace, then release name
|
|
77
|
+
releases.sort((a, b) => {
|
|
78
|
+
const nsCompare = a.namespace.localeCompare(b.namespace)
|
|
79
|
+
return nsCompare !== 0 ? nsCompare : a.name.localeCompare(b.name)
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
spinner.text = 'Gathering chart, image, and audit metadata...'
|
|
83
|
+
|
|
84
|
+
const rows = await Promise.all(releases.map(({ name, namespace, chart }) => limit(async () => {
|
|
85
|
+
const chartVersion = chart?.split('-').pop() || '(unknown)'
|
|
86
|
+
const [appVersion, imageTag, deployT, culprit] = await Promise.all([
|
|
87
|
+
getChartAppVersion(namespace, name),
|
|
88
|
+
getDeployedImageTag(namespace, name),
|
|
89
|
+
getHelmValue(namespace, name, 'deployT'),
|
|
90
|
+
getHelmValue(namespace, name, 'culprit'),
|
|
91
|
+
])
|
|
92
|
+
return {
|
|
93
|
+
row: formatRow(name, chartVersion, appVersion, imageTag, deployT, culprit),
|
|
94
|
+
namespace
|
|
95
|
+
}
|
|
96
|
+
})))
|
|
97
|
+
|
|
98
|
+
spinner.stop()
|
|
99
|
+
log(`${'RELEASE'.padEnd(34)}${'CHART VERSION'.padEnd(18)}${'APP VERSION'.padEnd(18)}${'IMAGE TAG'.padEnd(20)}DEPLOY INFO`)
|
|
100
|
+
|
|
101
|
+
let lastNamespace = ''
|
|
102
|
+
for (const { row, namespace } of rows) {
|
|
103
|
+
if (namespace !== lastNamespace) {
|
|
104
|
+
if (lastNamespace !== '') log('')
|
|
105
|
+
log(chalk.bold.green(namespace))
|
|
106
|
+
lastNamespace = namespace
|
|
107
|
+
}
|
|
108
|
+
log(row)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
audit().catch(err => {
|
|
113
|
+
spinner.stop()
|
|
114
|
+
console.error(err)
|
|
115
|
+
process.exit(1)
|
|
116
|
+
})
|
|
@@ -28,10 +28,13 @@ psqlSecurity:
|
|
|
28
28
|
TSDB_DENSE_SECRET_NAME: "cnpg-db-tsdb-dense-postgres-pw"
|
|
29
29
|
TSDB_DENSE_SECRET_KEY: "password"
|
|
30
30
|
|
|
31
|
+
serviceMonitor:
|
|
32
|
+
enabled: true
|
|
33
|
+
|
|
31
34
|
autoscaling:
|
|
32
35
|
minReplicas: 3
|
|
33
36
|
maxReplicas: 12
|
|
34
37
|
maxCPU: 80
|
|
35
38
|
|
|
36
39
|
ingressRoute:
|
|
37
|
-
host:
|
|
40
|
+
host: ${PROJECT_ID}-imagine-api.${HOST}.com
|
|
@@ -14,6 +14,7 @@ spec:
|
|
|
14
14
|
postInitTemplateSQL:
|
|
15
15
|
- CREATE EXTENSION timescaledb;
|
|
16
16
|
- CREATE EXTENSION jsquery;
|
|
17
|
+
- CREATE EXTENSION pg_stat_statements;
|
|
17
18
|
database: imagine
|
|
18
19
|
owner: imagine
|
|
19
20
|
secret:
|
|
@@ -38,6 +39,7 @@ spec:
|
|
|
38
39
|
shared_preload_libraries:
|
|
39
40
|
- timescaledb
|
|
40
41
|
- jsquery
|
|
42
|
+
- pg_stat_statements
|
|
41
43
|
parameters:
|
|
42
44
|
# max_worker_processes: "60"
|
|
43
45
|
max_worker_processes: "8"
|
|
@@ -18,7 +18,8 @@ spec:
|
|
|
18
18
|
postInitTemplateSQL:
|
|
19
19
|
- CREATE EXTENSION timescaledb;
|
|
20
20
|
- CREATE EXTENSION jsquery;
|
|
21
|
-
- CREATE DATABASE
|
|
21
|
+
- CREATE DATABASE pg_stat_statements;
|
|
22
|
+
- CREATE DATABASE imagine;
|
|
22
23
|
# - CREATE DATABASE app; # for the operator restores
|
|
23
24
|
# - CREATE ROLE app; # same
|
|
24
25
|
# owner: imagine
|
|
@@ -52,6 +53,7 @@ spec:
|
|
|
52
53
|
shared_preload_libraries:
|
|
53
54
|
- timescaledb
|
|
54
55
|
- jsquery
|
|
56
|
+
- pg_stat_statements
|
|
55
57
|
parameters:
|
|
56
58
|
# max_connections: "100"
|
|
57
59
|
# max_worker_processes: "60"
|
|
@@ -17,6 +17,7 @@ spec:
|
|
|
17
17
|
postInitTemplateSQL:
|
|
18
18
|
- CREATE EXTENSION timescaledb;
|
|
19
19
|
- CREATE EXTENSION jsquery;
|
|
20
|
+
- CREATE EXTENSION pg_stat_statements;
|
|
20
21
|
- CREATE DATABASE imagine; # leverege tsdb db
|
|
21
22
|
# secret:
|
|
22
23
|
# name: cnpg-db-tsdb-dense-imagine-pw # imagine db pw
|
|
@@ -48,6 +49,7 @@ spec:
|
|
|
48
49
|
shared_preload_libraries:
|
|
49
50
|
- timescaledb
|
|
50
51
|
- jsquery
|
|
52
|
+
- pg_stat_statements
|
|
51
53
|
parameters:
|
|
52
54
|
# max_worker_processes: "60"
|
|
53
55
|
max_worker_processes: "8"
|
|
@@ -4,6 +4,9 @@ image:
|
|
|
4
4
|
config:
|
|
5
5
|
LOG_CONFIG: '{"type":"pino","level":"warn"}'
|
|
6
6
|
|
|
7
|
-
API_UI_URL: "
|
|
8
|
-
MAIL_GUN_DOMAIN: "
|
|
9
|
-
MAIL_GUN_DEFAULT_SENDER: "no-reply
|
|
7
|
+
API_UI_URL: "${PROJECT_ID}.web.app"
|
|
8
|
+
MAIL_GUN_DOMAIN: "${MAIL_GUN_DOMAIN}"
|
|
9
|
+
MAIL_GUN_DEFAULT_SENDER: "no-reply@${MAIL_GUN_DOMAIN}"
|
|
10
|
+
|
|
11
|
+
serviceMonitor:
|
|
12
|
+
enabled: true
|
|
@@ -2,6 +2,9 @@ image:
|
|
|
2
2
|
tag: # v2.3.0
|
|
3
3
|
|
|
4
4
|
config:
|
|
5
|
-
UPLOADER_TYPE: "
|
|
6
|
-
UPLOADER_PROJECT_ID: "
|
|
7
|
-
UPLOADER_BUCKET: "
|
|
5
|
+
UPLOADER_TYPE: "${BUCKET_TYPE}"
|
|
6
|
+
UPLOADER_PROJECT_ID: "${PROJECT_ID}"
|
|
7
|
+
UPLOADER_BUCKET: "${PROJECT_ID}-geotile-server"
|
|
8
|
+
|
|
9
|
+
serviceMonitor:
|
|
10
|
+
enabled: true
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
#https://samber.github.io/awesome-prometheus-alerts/rules#docker-containers
|
|
2
2
|
apiVersion: monitoring.coreos.com/v1
|
|
3
3
|
kind: PrometheusRule
|
|
4
4
|
metadata:
|
|
5
|
-
name:
|
|
5
|
+
name: cadvisor-rules
|
|
6
6
|
namespace: prometheus
|
|
7
7
|
spec:
|
|
8
8
|
groups:
|
|
@@ -10,7 +10,7 @@ spec:
|
|
|
10
10
|
rules:
|
|
11
11
|
- alert: ContainerKilled
|
|
12
12
|
expr: time() - container_last_seen > 60
|
|
13
|
-
for:
|
|
13
|
+
for: 5m
|
|
14
14
|
labels:
|
|
15
15
|
severity: warning
|
|
16
16
|
annotations:
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
# https://github.com/cloudnative-pg/cloudnative-pg/blob/main/docs/src/samples/monitoring/prometheusrule.yaml
|
|
1
2
|
apiVersion: monitoring.coreos.com/v1
|
|
2
3
|
kind: PrometheusRule
|
|
3
4
|
metadata:
|
|
4
|
-
name: cnpg-
|
|
5
|
+
name: cnpg-rules
|
|
5
6
|
spec:
|
|
6
7
|
groups:
|
|
7
|
-
- name:
|
|
8
|
+
- name: CNPG
|
|
8
9
|
rules:
|
|
9
10
|
- alert: LongRunningTransaction
|
|
10
11
|
annotations:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
apiVersion: monitoring.coreos.com/v1
|
|
3
3
|
kind: PrometheusRule
|
|
4
4
|
metadata:
|
|
5
|
-
name:
|
|
5
|
+
name: elasticsearch-rules
|
|
6
6
|
namespace: prometheus
|
|
7
7
|
spec:
|
|
8
8
|
groups:
|
|
@@ -174,7 +174,7 @@ spec:
|
|
|
174
174
|
VALUE = {{ $value }}
|
|
175
175
|
LABELS = {{ $labels }}
|
|
176
176
|
- alert: ElasticsearchHighIndexingLatency
|
|
177
|
-
expr: elasticsearch_indices_indexing_index_time_seconds_total / elasticsearch_indices_indexing_index_total > 0.0005
|
|
177
|
+
expr: elasticsearch_indices_indexing_index_time_seconds_total / elasticsearch_indices_indexing_index_total > 0.002 # awesome was 0.0005
|
|
178
178
|
for: 10m
|
|
179
179
|
labels:
|
|
180
180
|
severity: warning
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
apiVersion: monitoring.coreos.com/v1
|
|
2
2
|
kind: PrometheusRule
|
|
3
3
|
metadata:
|
|
4
|
-
name:
|
|
4
|
+
name: stackdriver-rules
|
|
5
5
|
namespace: prometheus
|
|
6
6
|
|
|
7
7
|
spec:
|
|
8
8
|
groups:
|
|
9
|
-
- name:
|
|
9
|
+
- name: Stackdriver
|
|
10
10
|
rules:
|
|
11
11
|
- alert: StackdriverFailedScrape
|
|
12
12
|
expr: absent(stackdriver_pubsub_topic_pubsub_googleapis_com_topic_message_sizes_count) == 1
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
apiVersion: monitoring.coreos.com/v1
|
|
3
3
|
kind: PrometheusRule
|
|
4
4
|
metadata:
|
|
5
|
-
name: kubestate-
|
|
5
|
+
name: kubestate-rules
|
|
6
6
|
namespace: prometheus
|
|
7
7
|
spec:
|
|
8
8
|
groups:
|
|
@@ -385,7 +385,7 @@ spec:
|
|
|
385
385
|
LABELS = {{ $labels }}
|
|
386
386
|
- alert: KubernetesApiServerLatency
|
|
387
387
|
expr: histogram_quantile(0.99, sum(rate(apiserver_request_duration_seconds_bucket{verb!~"(?:CONNECT|WATCHLIST|WATCH|PROXY)"} [10m])) WITHOUT (subresource)) > 1
|
|
388
|
-
for:
|
|
388
|
+
for: 15m
|
|
389
389
|
labels:
|
|
390
390
|
severity: warning
|
|
391
391
|
annotations:
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# selected alerts from prom-operator default k8s rules (ChatGPT recommendation)
|
|
2
|
+
apiVersion: monitoring.coreos.com/v1
|
|
3
|
+
kind: PrometheusRule
|
|
4
|
+
metadata:
|
|
5
|
+
name: po-k8s-selective-alerts
|
|
6
|
+
namespace: prometheus
|
|
7
|
+
labels:
|
|
8
|
+
role: alert-rules
|
|
9
|
+
prometheus: kube-prometheus
|
|
10
|
+
spec:
|
|
11
|
+
groups:
|
|
12
|
+
- name: PromOp K8s Selective
|
|
13
|
+
rules:
|
|
14
|
+
- alert: KubePodImagePullBackOff
|
|
15
|
+
expr: kube_pod_container_status_waiting_reason{reason="ImagePullBackOff", namespace!~"kube-system|prometheus"} > 0
|
|
16
|
+
for: 2m
|
|
17
|
+
labels:
|
|
18
|
+
severity: warning
|
|
19
|
+
annotations:
|
|
20
|
+
summary: Pod has image pull back-off ({{ $labels.namespace }}/{{ $labels.pod }})
|
|
21
|
+
description: Pod '{{ $labels.pod }}' in namespace '{{ $labels.namespace }}' has containers in ImagePullBackOff.
|
|
22
|
+
VALUE = {{ $value }}
|
|
23
|
+
LABELS = {{ $labels }}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
apiVersion: monitoring.coreos.com/v1
|
|
3
3
|
kind: PrometheusRule
|
|
4
4
|
metadata:
|
|
5
|
-
name: prometheus-
|
|
5
|
+
name: prometheus-rules # embedded-exporter
|
|
6
6
|
namespace: prometheus
|
|
7
7
|
spec:
|
|
8
8
|
groups:
|
|
@@ -21,7 +21,7 @@ spec:
|
|
|
21
21
|
LABELS = {{ $labels }}
|
|
22
22
|
- alert: PrometheusTargetMissing
|
|
23
23
|
expr: up{"namespace"!~"kube-system"} == 0 # awesome was => up == 0
|
|
24
|
-
for:
|
|
24
|
+
for: 3m # awesome was => 0m
|
|
25
25
|
labels:
|
|
26
26
|
severity: critical
|
|
27
27
|
annotations:
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
apiVersion: monitoring.coreos.com/v1
|
|
3
3
|
kind: PrometheusRule
|
|
4
4
|
metadata:
|
|
5
|
-
name:
|
|
5
|
+
name: traefik-rules
|
|
6
6
|
namespace: prometheus
|
|
7
7
|
spec:
|
|
8
8
|
groups:
|
|
9
|
-
- name: EmbeddedExporterV2-rules
|
|
9
|
+
- name: Traefik (awesome) # EmbeddedExporterV2-rules
|
|
10
10
|
rules:
|
|
11
11
|
- alert: TraefikServiceDown
|
|
12
12
|
expr: count(traefik_service_server_up) by (service) == 0
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
#
|
|
3
|
+
# Load the standard helper functions
|
|
4
|
+
. `build-tools --bashfun`
|
|
5
|
+
|
|
6
|
+
RULES_DIR="$GITTOP/prom-operator/rules"
|
|
7
|
+
[ ! -d "$RULES_DIR" ] && errorExit "Missing rules directory [$RULES_DIR]"
|
|
8
|
+
|
|
9
|
+
case "$1" in
|
|
10
|
+
"apply"|"delete")
|
|
11
|
+
cd $GITTOP
|
|
12
|
+
overwhelm
|
|
13
|
+
for ruleset in $RULES_DIR/*.yaml; do
|
|
14
|
+
shortName=`basename $ruleset`
|
|
15
|
+
printf "\n $1 rules => `color g $shortName`\n"
|
|
16
|
+
kubectl $1 -n prometheus -f $ruleset
|
|
17
|
+
done
|
|
18
|
+
echo "" && kubectl get -A prometheusrules.monitoring.coreos.com
|
|
19
|
+
;;
|
|
20
|
+
|
|
21
|
+
*)
|
|
22
|
+
cat<<USAGE_HELP
|
|
23
|
+
|
|
24
|
+
Usage: $0 [apply|delete]
|
|
25
|
+
|
|
26
|
+
This will either apply or delete the rules defined in $RULES_DIR
|
|
27
|
+
|
|
28
|
+
USAGE_HELP
|
|
29
|
+
|
|
30
|
+
exit 1
|
|
31
|
+
;;
|
|
32
|
+
esac
|
|
@@ -4,7 +4,7 @@ image:
|
|
|
4
4
|
config:
|
|
5
5
|
CF_TRANSPORT_CONFIG: '{
|
|
6
6
|
"type": "pubsub",
|
|
7
|
-
"projectId": "
|
|
7
|
+
"projectId": "${PROJECT_NAME}" ,
|
|
8
8
|
"keyFilename": "/home/node/unused/key.json" ,
|
|
9
9
|
"publisher": {
|
|
10
10
|
"batching": {
|
|
@@ -12,3 +12,6 @@ config:
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
}'
|
|
15
|
+
|
|
16
|
+
serviceMonitor:
|
|
17
|
+
enabled: true
|
|
File without changes
|
|
@@ -4,8 +4,8 @@ showInstalling "Redis"
|
|
|
4
4
|
|
|
5
5
|
OCI_CHART="oci://registry-1.docker.io/bitnamicharts/redis"
|
|
6
6
|
|
|
7
|
-
[ -z "$REDIS_CHART_VERSION" ] && REDIS_CHART_VERSION="20.
|
|
7
|
+
[ -z "$REDIS_CHART_VERSION" ] && REDIS_CHART_VERSION="20.13.0"
|
|
8
8
|
|
|
9
9
|
helm upgrade --install redis $OCI_CHART \
|
|
10
|
-
--values redis/values.yaml \
|
|
10
|
+
--values redis/values-local.yaml \
|
|
11
11
|
--version $REDIS_CHART_VERSION $HELM_WHAT
|
|
@@ -4,14 +4,19 @@
|
|
|
4
4
|
# - npm run sequelizeRunMigrations
|
|
5
5
|
#
|
|
6
6
|
image:
|
|
7
|
-
tag: # v1.
|
|
7
|
+
tag: # v1.14.0
|
|
8
8
|
|
|
9
9
|
config:
|
|
10
10
|
LOG_CONFIG: '{"type":"pino","level":"warn"}'
|
|
11
11
|
|
|
12
|
-
UPLOADER_PROJECT_ID: "
|
|
13
|
-
UPLOADER_BUCKET: "
|
|
14
|
-
UPLOADER_LOCATION: "
|
|
12
|
+
UPLOADER_PROJECT_ID: "${PROJECT_ID}"
|
|
13
|
+
UPLOADER_BUCKET: "${PROJECT_ID}-resource-server"
|
|
14
|
+
UPLOADER_LOCATION: "${GCE_REGION}"
|
|
15
15
|
|
|
16
16
|
# CNPG override
|
|
17
17
|
SQL_HOST: "cnpg-db-psql-stack-rw.cnpg-operands" # vs postgres-postgresql
|
|
18
|
+
# SQL_READ_REPLICATION_CONFIG: '[ { "host": "cnpg-db-psql-stack-r.cnpg-operands" } ]'
|
|
19
|
+
# TRANSACTION_MAX_RETRIES: "5"
|
|
20
|
+
|
|
21
|
+
serviceMonitor:
|
|
22
|
+
enabled: true
|
|
File without changes
|
|
@@ -20,7 +20,7 @@ addHelmRepo traefik https://helm.traefik.io/traefik
|
|
|
20
20
|
[ -z "$TRAEFIK_CHART_VERSION" ] && TRAEFIK_CHART_VERSION="35"
|
|
21
21
|
helm upgrade --install traefik traefik/traefik \
|
|
22
22
|
--namespace $TRAEFIK_NAMESPACE --create-namespace \
|
|
23
|
-
--values traefik/values.yaml \
|
|
23
|
+
--values traefik/values-local.yaml \
|
|
24
24
|
--version $TRAEFIK_CHART_VERSION $HELM_WHAT
|
|
25
25
|
|
|
26
26
|
removeHelmRepo traefik
|
|
@@ -9,7 +9,7 @@ config:
|
|
|
9
9
|
|
|
10
10
|
TRANSPORT_CONFIG: '{
|
|
11
11
|
"type": "pubsub",
|
|
12
|
-
"projectId": "
|
|
12
|
+
"projectId": "${PROJECT_ID}",
|
|
13
13
|
"publisher": {
|
|
14
14
|
"batching": {
|
|
15
15
|
"maxMilliseconds": 0,
|
|
@@ -27,3 +27,6 @@ config:
|
|
|
27
27
|
},
|
|
28
28
|
"channel": "writer-bq"
|
|
29
29
|
}'
|
|
30
|
+
|
|
31
|
+
serviceMonitor:
|
|
32
|
+
enabled: true
|
|
@@ -19,7 +19,7 @@ config:
|
|
|
19
19
|
|
|
20
20
|
TRANSPORT_CONFIG: '{
|
|
21
21
|
"type": "pubsub",
|
|
22
|
-
"projectId": "
|
|
22
|
+
"projectId": "${PROJECT_NAME}",
|
|
23
23
|
"publisher": {
|
|
24
24
|
"batching": {
|
|
25
25
|
"maxMilliseconds": 0,
|
|
@@ -60,3 +60,6 @@ resources:
|
|
|
60
60
|
requests:
|
|
61
61
|
cpu: 250m
|
|
62
62
|
memory: 600Mi
|
|
63
|
+
|
|
64
|
+
serviceMonitor:
|
|
65
|
+
enabled: true
|
|
@@ -10,7 +10,7 @@ config:
|
|
|
10
10
|
ELASTICSEARCH_DATA_METADATA_ENABLED: "false"
|
|
11
11
|
TRANSPORT_CONFIG: '{
|
|
12
12
|
"type": "pubsub",
|
|
13
|
-
"projectId": "
|
|
13
|
+
"projectId": "${PROJECT_ID}",
|
|
14
14
|
"publisher": {
|
|
15
15
|
"batching": {
|
|
16
16
|
"maxMilliseconds": 0,
|
|
@@ -28,3 +28,6 @@ config:
|
|
|
28
28
|
},
|
|
29
29
|
"channel": "writer-rt"
|
|
30
30
|
}'
|
|
31
|
+
|
|
32
|
+
serviceMonitor:
|
|
33
|
+
enabled: true
|