Add Knative metrics to Prometheus
This commit is contained in:
parent
0e20c8eb8b
commit
da873584af
8 changed files with 154 additions and 3 deletions
|
@ -5,7 +5,7 @@ module Clusters
|
|||
class Knative < ActiveRecord::Base
|
||||
VERSION = '0.2.2'.freeze
|
||||
REPOSITORY = 'https://storage.googleapis.com/triggermesh-charts'.freeze
|
||||
|
||||
METRICS_CONFIG = 'https://storage.googleapis.com/triggermesh-charts/istio-metrics.yaml'.freeze
|
||||
FETCH_IP_ADDRESS_DELAY = 30.seconds
|
||||
|
||||
self.table_name = 'clusters_applications_knative'
|
||||
|
@ -49,7 +49,8 @@ module Clusters
|
|||
rbac: cluster.platform_kubernetes_rbac?,
|
||||
chart: chart,
|
||||
files: files,
|
||||
repository: REPOSITORY
|
||||
repository: REPOSITORY,
|
||||
postinstall: install_knative_metrics
|
||||
)
|
||||
end
|
||||
|
||||
|
@ -94,6 +95,10 @@ module Clusters
|
|||
rescue Kubeclient::ResourceNotFoundError
|
||||
[]
|
||||
end
|
||||
|
||||
def install_knative_metrics
|
||||
["kubectl apply -f #{METRICS_CONFIG}"] if cluster.application_prometheus_available?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -50,7 +50,8 @@ module Clusters
|
|||
version: VERSION,
|
||||
rbac: cluster.platform_kubernetes_rbac?,
|
||||
chart: chart,
|
||||
files: files
|
||||
files: files,
|
||||
postinstall: install_knative_metrics
|
||||
)
|
||||
end
|
||||
|
||||
|
@ -74,6 +75,10 @@ module Clusters
|
|||
def kube_client
|
||||
cluster&.kubeclient&.core_client
|
||||
end
|
||||
|
||||
def install_knative_metrics
|
||||
["kubectl apply -f #{Clusters::Applications::Knative::METRICS_CONFIG}"] if cluster.application_knative_available?
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -63,6 +63,7 @@ module Clusters
|
|||
delegate :available?, to: :application_helm, prefix: true, allow_nil: true
|
||||
delegate :available?, to: :application_ingress, prefix: true, allow_nil: true
|
||||
delegate :available?, to: :application_prometheus, prefix: true, allow_nil: true
|
||||
delegate :available?, to: :application_knative, prefix: true, allow_nil: true
|
||||
|
||||
enum cluster_type: {
|
||||
instance_type: 1,
|
||||
|
|
5
changelogs/unreleased/knative-prometheus.yml
Normal file
5
changelogs/unreleased/knative-prometheus.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Add Knative metrics to Prometheus
|
||||
merge_request: 23972
|
||||
author: Chris Baumbauer
|
||||
type: added
|
|
@ -108,6 +108,23 @@ describe Clusters::Applications::Knative do
|
|||
expect(subject.version).to eq('0.2.2')
|
||||
expect(subject.files).to eq(knative.files)
|
||||
end
|
||||
|
||||
it 'should not install metrics for prometheus' do
|
||||
expect(subject.postinstall).to be_nil
|
||||
end
|
||||
|
||||
context 'with prometheus installed' do
|
||||
let(:prometheus) { create(:clusters_applications_prometheus, :installed) }
|
||||
let(:knative) { create(:clusters_applications_knative, cluster: prometheus.cluster) }
|
||||
|
||||
subject { knative.install_command }
|
||||
|
||||
it 'should install metrics' do
|
||||
expect(subject.postinstall).not_to be_nil
|
||||
expect(subject.postinstall.length).to be(1)
|
||||
expect(subject.postinstall[0]).to eql("kubectl apply -f #{Clusters::Applications::Knative::METRICS_CONFIG}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#files' do
|
||||
|
|
|
@ -165,6 +165,10 @@ describe Clusters::Applications::Prometheus do
|
|||
expect(subject.files).to eq(prometheus.files)
|
||||
end
|
||||
|
||||
it 'should not install knative metrics' do
|
||||
expect(subject.postinstall).to be_nil
|
||||
end
|
||||
|
||||
context 'on a rbac enabled cluster' do
|
||||
before do
|
||||
prometheus.cluster.platform_kubernetes.rbac!
|
||||
|
@ -180,6 +184,17 @@ describe Clusters::Applications::Prometheus do
|
|||
expect(subject.version).to eq('6.7.3')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with knative installed' do
|
||||
let(:knative) { create(:clusters_applications_knative, :installed ) }
|
||||
let(:prometheus) { create(:clusters_applications_prometheus, cluster: knative.cluster) }
|
||||
|
||||
subject { prometheus.install_command }
|
||||
|
||||
it 'should install metrics' do
|
||||
expect(subject.postinstall).to include("kubectl apply -f #{Clusters::Applications::Knative::METRICS_CONFIG}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe '#files' do
|
||||
|
|
|
@ -29,6 +29,7 @@ describe Clusters::Cluster do
|
|||
it { is_expected.to delegate_method(:available?).to(:application_helm).with_prefix }
|
||||
it { is_expected.to delegate_method(:available?).to(:application_ingress).with_prefix }
|
||||
it { is_expected.to delegate_method(:available?).to(:application_prometheus).with_prefix }
|
||||
it { is_expected.to delegate_method(:available?).to(:application_knative).with_prefix }
|
||||
|
||||
it { is_expected.to respond_to :project }
|
||||
|
||||
|
|
102
vendor/prometheus/values.yaml
vendored
102
vendor/prometheus/values.yaml
vendored
|
@ -141,3 +141,105 @@ serverFiles:
|
|||
- __meta_kubernetes_pod_name
|
||||
action: replace
|
||||
target_label: kubernetes_pod_name
|
||||
# Sourced from Knative monitoring config: https://github.com/knative/serving/blob/master/config/monitoring/metrics/prometheus/100-prometheus-scrape-config.yaml
|
||||
- job_name: autoscaler
|
||||
scrape_interval: 3s
|
||||
scrape_timeout: 3s
|
||||
kubernetes_sd_configs:
|
||||
- role: pod
|
||||
relabel_configs:
|
||||
# Scrape only the the targets matching the following metadata
|
||||
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_pod_label_app, __meta_kubernetes_pod_container_port_name]
|
||||
action: keep
|
||||
regex: knative-serving;autoscaler;metrics
|
||||
# Rename metadata labels to be reader friendly
|
||||
- source_labels: [__meta_kubernetes_namespace]
|
||||
target_label: namespace
|
||||
- source_labels: [__meta_kubernetes_pod_name]
|
||||
target_label: pod
|
||||
- source_labels: [__meta_kubernetes_service_name]
|
||||
target_label: service
|
||||
- job_name: activator
|
||||
scrape_interval: 3s
|
||||
scrape_timeout: 3s
|
||||
kubernetes_sd_configs:
|
||||
- role: pod
|
||||
relabel_configs:
|
||||
# Scrape only the the targets matching the following metadata
|
||||
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_pod_label_app, __meta_kubernetes_pod_container_port_name]
|
||||
action: keep
|
||||
regex: knative-serving;activator;metrics-port
|
||||
# Rename metadata labels to be reader friendly
|
||||
- source_labels: [__meta_kubernetes_namespace]
|
||||
target_label: namespace
|
||||
- source_labels: [__meta_kubernetes_pod_name]
|
||||
target_label: pod
|
||||
- source_labels: [__meta_kubernetes_service_name]
|
||||
target_label: service
|
||||
# Istio mesh
|
||||
- job_name: istio-mesh
|
||||
scrape_interval: 5s
|
||||
kubernetes_sd_configs:
|
||||
- role: endpoints
|
||||
relabel_configs:
|
||||
# Scrape only the the targets matching the following metadata
|
||||
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
|
||||
action: keep
|
||||
regex: istio-system;istio-telemetry;prometheus
|
||||
# Rename metadata labels to be reader friendly
|
||||
- source_labels: [__meta_kubernetes_namespace]
|
||||
target_label: namespace
|
||||
- source_labels: [__meta_kubernetes_pod_name]
|
||||
target_label: pod
|
||||
- source_labels: [__meta_kubernetes_service_name]
|
||||
target_label: service
|
||||
- job_name: istio-policy
|
||||
scrape_interval: 5s
|
||||
kubernetes_sd_configs:
|
||||
- role: endpoints
|
||||
relabel_configs:
|
||||
# Scrape only the the targets matching the following metadata
|
||||
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
|
||||
action: keep
|
||||
regex: istio-system;istio-policy;http-monitoring
|
||||
# Rename metadata labels to be reader friendly
|
||||
- source_labels: [__meta_kubernetes_namespace]
|
||||
target_label: namespace
|
||||
- source_labels: [__meta_kubernetes_pod_name]
|
||||
target_label: pod
|
||||
- source_labels: [__meta_kubernetes_service_name]
|
||||
target_label: service
|
||||
# Istio telemetry
|
||||
- job_name: istio-telemetry
|
||||
scrape_interval: 5s
|
||||
kubernetes_sd_configs:
|
||||
- role: endpoints
|
||||
relabel_configs:
|
||||
# Scrape only the the targets matching the following metadata
|
||||
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
|
||||
action: keep
|
||||
regex: istio-system;istio-telemetry;http-monitoring
|
||||
# Rename metadata labels to be reader friendly
|
||||
- source_labels: [__meta_kubernetes_namespace]
|
||||
target_label: namespace
|
||||
- source_labels: [__meta_kubernetes_pod_name]
|
||||
target_label: pod
|
||||
- source_labels: [__meta_kubernetes_service_name]
|
||||
target_label: service
|
||||
# Istio pilot
|
||||
- job_name: istio-pilot
|
||||
scrape_interval: 5s
|
||||
kubernetes_sd_configs:
|
||||
- role: endpoints
|
||||
relabel_configs:
|
||||
# Scrape only the the targets matching the following metadata
|
||||
- source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name]
|
||||
action: keep
|
||||
regex: istio-system;istio-pilot;http-monitoring
|
||||
# Rename metadata labels to be reader friendly
|
||||
- source_labels: [__meta_kubernetes_namespace]
|
||||
target_label: namespace
|
||||
- source_labels: [__meta_kubernetes_pod_name]
|
||||
target_label: pod
|
||||
- source_labels: [__meta_kubernetes_service_name]
|
||||
target_label: service
|
||||
|
|
Loading…
Reference in a new issue