mirror of https://github.com/rancher/dashboard.git
Adding new logging Outputs and ClusterOutputs
- Also added ssl/ca to Forward, Loki and Splunk rancher/dashboard#1191
This commit is contained in:
parent
4919c76d9a
commit
a1c0b943f0
|
|
@ -748,13 +748,71 @@ logging:
|
|||
configureKubernetesLabels: Configure Kubernetes metadata in a Prometheus like format
|
||||
extractKubernetesLabels: Extract Kubernetes labels as Loki labels
|
||||
dropSingleKey: If a record only has 1 key, then just set the log line to the value and discard the key
|
||||
caCert: CA Cert
|
||||
cert: Cert
|
||||
key: Key
|
||||
awsElasticsearch:
|
||||
url: URL
|
||||
keyId: Key Id
|
||||
secretKey: Secret Key
|
||||
azurestorage:
|
||||
storageAccount: Storage Account
|
||||
accessKey: Access Key
|
||||
container: Container
|
||||
path: Path
|
||||
storeAs: Store As
|
||||
cloudwatch:
|
||||
keyId: Key Id
|
||||
secretKey: Secret Key
|
||||
endpoint: Endpoint
|
||||
region: Region
|
||||
datadog:
|
||||
apiKey: API Key
|
||||
useSSL: Use SSL
|
||||
useCompression: Use Compression
|
||||
host: Host
|
||||
file:
|
||||
path: Path
|
||||
gcs:
|
||||
project: Project
|
||||
credentialsJson: Credentials Json
|
||||
bucket: Bucket
|
||||
path: Path
|
||||
overwriteExistingPath: Overwrite Existing Path
|
||||
kinesisStream:
|
||||
streamName: Stream Name
|
||||
keyId: Key Id
|
||||
secretKey: Secret Key
|
||||
logdna:
|
||||
apiKey: API Key
|
||||
hostname: Hostname
|
||||
app: App
|
||||
logz:
|
||||
url: URL
|
||||
port: Port
|
||||
token: Api Token
|
||||
enableCompression: Enable Compression
|
||||
newrelic:
|
||||
apiKey: API Key
|
||||
licenseKey: License Key
|
||||
baseURI: Base URI
|
||||
sumologic:
|
||||
endpoint: Endpoint
|
||||
sourceName: Source Name
|
||||
s3:
|
||||
keyId: Key Id
|
||||
secretKey: Secret Key
|
||||
endpoint: Endpoint
|
||||
bucket: Bucket
|
||||
path: Path
|
||||
overwriteExistingPath: Overwrite Existing Path
|
||||
output:
|
||||
selectOutputs: Select Outputs
|
||||
selectBanner: Select to configure an output
|
||||
sections:
|
||||
target: Target
|
||||
access: Access
|
||||
certificate: SSL
|
||||
certificate: Connection
|
||||
labels: Labels
|
||||
outputProviders:
|
||||
elasticsearch: Elasticsearch
|
||||
|
|
@ -762,6 +820,18 @@ logging:
|
|||
kafka: Kafka
|
||||
forward: Fluentd
|
||||
loki: Loki
|
||||
awsElasticsearch: Amazon Elasticsearch
|
||||
azurestorage: Azure Storage
|
||||
cloudwatch: Cloudwatch
|
||||
datadog: Datadog
|
||||
file: File
|
||||
gcs: GCS
|
||||
kinesisStream: Kinesis Stream
|
||||
logdna: LogDNA
|
||||
logz: LogZ
|
||||
newrelic: New Relic
|
||||
sumologic: SumoLogic
|
||||
s3: S3
|
||||
unknown: Unknown
|
||||
overview:
|
||||
poweredBy: Banzai Cloud
|
||||
|
|
@ -774,17 +844,22 @@ logging:
|
|||
protocol: Protocol
|
||||
index: Index
|
||||
token: Token
|
||||
clientCert: Client Cert
|
||||
clientKey: Client Key
|
||||
insecureSsl: Insecure SSL
|
||||
indexName: Index Name
|
||||
source: Source
|
||||
caFile: CA File
|
||||
caPath: CA Path
|
||||
clientCert: Client Cert
|
||||
clientKey: Client Key
|
||||
forward:
|
||||
host: Host
|
||||
port: Port
|
||||
sharedKey: Shared Key
|
||||
username: Username
|
||||
password: Password
|
||||
clientCertPath: Client Cert Path
|
||||
clientPrivateKeyPath: Client Private Key Path
|
||||
clientPrivateKeyPassphrase: Client Private Key Passphrase
|
||||
|
||||
longhorn:
|
||||
overview:
|
||||
|
|
|
|||
|
|
@ -5,19 +5,21 @@ import Tabbed from '@/components/Tabbed';
|
|||
import Tab from '@/components/Tabbed/Tab';
|
||||
import CruResource from '@/components/CruResource';
|
||||
import NameNsDescription from '@/components/form/NameNsDescription';
|
||||
import ToggleGradientBox from '@/components/ToggleGradientBox';
|
||||
import Labels from '@/components/form/Labels';
|
||||
import LabeledSelect from '@/components/form/LabeledSelect';
|
||||
import Banner from '@/components/Banner';
|
||||
import { PROVIDERS } from '@/models/logging.banzaicloud.io.output';
|
||||
import { _VIEW } from '@/config/query-params';
|
||||
import { clone } from '@/utils/object';
|
||||
import isEqual from 'lodash/isEqual';
|
||||
import isEmpty from 'lodash/isEmpty';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Banner, CruResource, Labels, LabeledSelect, NameNsDescription, Tab, Tabbed, ToggleGradientBox
|
||||
Banner, CruResource, Labels, LabeledSelect, NameNsDescription, Tab, Tabbed
|
||||
},
|
||||
|
||||
mixins: [CreateEditView, ToggleGradientBox],
|
||||
mixins: [CreateEditView],
|
||||
|
||||
async fetch() {
|
||||
await this.$store.dispatch('cluster/findAll', { type: SECRET });
|
||||
|
|
@ -34,18 +36,19 @@ export default {
|
|||
label: this.t(provider.labelKey)
|
||||
}));
|
||||
|
||||
this.value.spec = this.value.spec || {};
|
||||
if (this.mode !== _VIEW) {
|
||||
this.$set(this.value, 'spec', this.value.spec || {});
|
||||
|
||||
providers.forEach((provider) => {
|
||||
this.value.spec[provider.name] = this.value.spec[provider.name] || provider.default;
|
||||
});
|
||||
providers.forEach((provider) => {
|
||||
this.$set(this.value.spec, provider.name, this.value.spec[provider.name] || clone(provider.default));
|
||||
});
|
||||
}
|
||||
|
||||
const selectedProviders = providers.filter((provider) => {
|
||||
const specProvider = this.value.spec[provider.name];
|
||||
const correctedSpecProvider = provider.name === 'forward' ? specProvider.servers[0] : specProvider;
|
||||
const specProviderKeys = Object.keys(correctedSpecProvider || {}).filter(key => !['format', 'configure_kubernetes_labels'].includes(key));
|
||||
const correctedSpecProvider = provider.name === 'forward' ? specProvider?.servers?.[0] || {} : specProvider;
|
||||
|
||||
return specProviderKeys.length > 0;
|
||||
return !isEmpty(correctedSpecProvider) && !isEqual(correctedSpecProvider, provider.default);
|
||||
});
|
||||
|
||||
return {
|
||||
|
|
@ -115,12 +118,12 @@ export default {
|
|||
</Banner>
|
||||
<Tabbed v-else ref="tabbed" :side-tabs="true">
|
||||
<Tab name="Output" label="Output" :weight="1">
|
||||
<div class="row mb-20">
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledSelect v-model="selectedProvider" label="Output" :options="providers" :mode="mode" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="spacer"></div>
|
||||
<component :is="getComponent(selectedProvider)" :value="value.spec[selectedProvider]" :mode="mode" />
|
||||
</Tab>
|
||||
<Tab
|
||||
|
|
|
|||
|
|
@ -0,0 +1,64 @@
|
|||
<script>
|
||||
import LabeledInput from '@/components/form/LabeledInput';
|
||||
import SecretSelector from '@/components/form/SecretSelector';
|
||||
|
||||
export default {
|
||||
components: { LabeledInput, SecretSelector },
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.target') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.endpoint.url" :mode="mode" :disabled="disabled" :label="t('logging.awsElasticsearch.url')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.access') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-10">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.endpoint.access_key_id"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.awsElasticsearch.keyId')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.endpoint.secret_access_key"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
<script>
|
||||
import LabeledInput from '@/components/form/LabeledInput';
|
||||
import SecretSelector from '@/components/form/SecretSelector';
|
||||
|
||||
export default {
|
||||
components: { LabeledInput, SecretSelector },
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.target') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-10">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.azure_container" :mode="mode" :disabled="disabled" :label="t('logging.azurestorage.container')" />
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.path" :mode="mode" :disabled="disabled" :label="t('logging.azurestorage.path')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.store_as" :mode="mode" :disabled="disabled" :label="t('logging.azurestorage.storeAs')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.access') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-10">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.azure_storage_account"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.azurestorage.storageAccount')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.azure_storage_access_key"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.azurestorage.accessKey')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
<script>
|
||||
import LabeledInput from '@/components/form/LabeledInput';
|
||||
import SecretSelector from '@/components/form/SecretSelector';
|
||||
|
||||
export default {
|
||||
components: { LabeledInput, SecretSelector },
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.target') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.region" :mode="mode" :disabled="disabled" :label="t('logging.cloudwatch.region')" />
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.endpoint" :mode="mode" :disabled="disabled" :label="t('logging.cloudwatch.endpoint')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.access') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-10">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.aws_key_id"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.cloudwatch.keyId')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.aws_sec_key"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.cloudwatch.secretKey')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
@ -0,0 +1,75 @@
|
|||
<script>
|
||||
import Checkbox from '@/components/form/Checkbox';
|
||||
import LabeledInput from '@/components/form/LabeledInput';
|
||||
import SecretSelector from '@/components/form/SecretSelector';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Checkbox, LabeledInput, SecretSelector
|
||||
},
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.target') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.host" :mode="mode" :disabled="disabled" :label="t('logging.datadog.host')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.access') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.api_key"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.datadog.apiKey')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.certificate') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-10">
|
||||
<div class="col span-6">
|
||||
<Checkbox v-model="value.use_ssl" :mode="mode" :disabled="disabled" :label="t('logging.datadog.useSSL')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-10">
|
||||
<div class="col span-6">
|
||||
<Checkbox v-model="value.use_compression" :mode="mode" :disabled="disabled" :label="t('logging.datadog.useCompression')" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
<script>
|
||||
import LabeledInput from '@/components/form/LabeledInput';
|
||||
|
||||
export default {
|
||||
components: { LabeledInput },
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="forward">
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.target') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.path" :mode="mode" :disabled="disabled" :label="t('logging.file.path')" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
@ -85,5 +85,42 @@ export default {
|
|||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.certificate') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.tls_client_cert_path"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.forward.clientCertPath')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.tls_client_private_key_path"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.forward.clientPrivateKeyPath')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.tls_client_private_key_passphrase"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.forward.clientPrivateKeyPassphrase')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,77 @@
|
|||
<script>
|
||||
import Checkbox from '@/components/form/Checkbox';
|
||||
import LabeledInput from '@/components/form/LabeledInput';
|
||||
import SecretSelector from '@/components/form/SecretSelector';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Checkbox, LabeledInput, SecretSelector
|
||||
},
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.target') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-10">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.project" :mode="mode" :disabled="disabled" :label="t('logging.gcs.project')" />
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.bucket" :mode="mode" :disabled="disabled" :label="t('logging.gcs.bucket')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.path" :mode="mode" :disabled="disabled" :label="t('logging.gcs.path')" />
|
||||
</div>
|
||||
<div class="col span-6 overwrite">
|
||||
<Checkbox v-model="value.overwrite" :mode="mode" :disabled="disabled" :label="t('logging.gcs.overwriteExistingPath')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.access') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.credentials_json"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.gcs.credentialsJson')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.overwrite {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -0,0 +1,65 @@
|
|||
<script>
|
||||
import SecretSelector from '@/components/form/SecretSelector';
|
||||
import LabeledInput from '@/components/form/LabeledInput';
|
||||
|
||||
export default {
|
||||
components: { LabeledInput, SecretSelector },
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.access') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.stream_name" :mode="mode" :disabled="disabled" :label="t('logging.kinesisStream.streamName')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.access') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.aws_key_id"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.kinesisStream.keyId')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.aws_sec_key"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.kinesisStream.secretKey')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
<script>
|
||||
import LabeledInput from '@/components/form/LabeledInput';
|
||||
|
||||
export default {
|
||||
components: { LabeledInput },
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.target') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-10">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.hostname" :mode="mode" :disabled="disabled" :label="t('logging.logdna.hostname')" />
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.app" :mode="mode" :disabled="disabled" :label="t('logging.logdna.app')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.access') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.api_key" :mode="mode" :disabled="disabled" :label="t('logging.logdna.apiKey')" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
@ -0,0 +1,88 @@
|
|||
<script>
|
||||
import Checkbox from '@/components/form/Checkbox';
|
||||
import LabeledInput from '@/components/form/LabeledInput';
|
||||
import SecretSelector from '@/components/form/SecretSelector';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Checkbox, LabeledInput, SecretSelector
|
||||
},
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
port: {
|
||||
get() {
|
||||
return this.value.endpoint.port;
|
||||
},
|
||||
set(port) {
|
||||
this.$set(this.value.endpoint, 'port', Number.parseInt(port));
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.target') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.endpoint.url" :mode="mode" :disabled="disabled" :label="t('logging.logz.url')" />
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="port" :mode="mode" :disabled="disabled" type="number" :label="t('logging.logz.port')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.access') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.endpoint.token"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.logz.token')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.certificate') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<Checkbox
|
||||
v-model="value.gzip"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.logz.enableCompression')"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
@ -71,6 +71,43 @@ export default {
|
|||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.certificate') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.ca_cert"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.loki.caCert')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.cert"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.loki.cert')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.key"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.loki.key')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.labels') }}</h3>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,65 @@
|
|||
<script>
|
||||
import LabeledInput from '@/components/form/LabeledInput';
|
||||
import SecretSelector from '@/components/form/SecretSelector';
|
||||
|
||||
export default {
|
||||
components: { LabeledInput, SecretSelector },
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.target') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledInput
|
||||
v-model="value.base_uri"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.newrelic.baseURI')"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.api_key"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.newrelic.apiKey')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.license_key"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.newrelic.licenseKey')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
<script>
|
||||
import Checkbox from '@/components/form/Checkbox';
|
||||
import LabeledInput from '@/components/form/LabeledInput';
|
||||
import SecretSelector from '@/components/form/SecretSelector';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Checkbox, LabeledInput, SecretSelector
|
||||
},
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
computed: {
|
||||
overwrite: {
|
||||
get() {
|
||||
return this.value.overwrite === 'true';
|
||||
},
|
||||
set(value) {
|
||||
this.$set(this.value, 'overwrite', value.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.target') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mb-10">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.s3_endpoint" :mode="mode" :disabled="disabled" :label="t('logging.s3.endpoint')" />
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.s3_bucket" :mode="mode" :disabled="disabled" :label="t('logging.s3.bucket')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledInput v-model="value.path" :mode="mode" :disabled="disabled" :label="t('logging.s3.path')" />
|
||||
</div>
|
||||
<div class="col span-6 overwrite">
|
||||
<Checkbox v-model="overwrite" :mode="mode" :disabled="disabled" :label="t('logging.s3.overwriteExistingPath')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="spacer"></div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.access') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.aws_key_id"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.s3.keyId')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.aws_sec_key"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.s3.secretKey')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.overwrite {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
|
|
@ -89,5 +89,45 @@ export default {
|
|||
<Checkbox v-model="value.insecure_ssl" :mode="mode" :disabled="disabled" :label="t('logging.splunk.insecureSsl')" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.ca_file"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.splunk.caFile')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.ca_path"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.splunk.caPath')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.client_cert"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.splunk.clientCert')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.client_key"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.splunk.clientKey')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
<script>
|
||||
import LabeledInput from '@/components/form/LabeledInput';
|
||||
import SecretSelector from '@/components/form/SecretSelector';
|
||||
|
||||
export default {
|
||||
components: { LabeledInput, SecretSelector },
|
||||
props: {
|
||||
value: {
|
||||
type: Object,
|
||||
default: () => {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false
|
||||
},
|
||||
mode: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<h3>{{ t('logging.output.sections.target') }}</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<LabeledInput
|
||||
v-model="value.source_name"
|
||||
class="source-name"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.sumologic.sourceName')"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col span-6">
|
||||
<SecretSelector
|
||||
v-model="value.endpoint"
|
||||
:mode="mode"
|
||||
:disabled="disabled"
|
||||
:label="t('logging.sumologic.endpoint')"
|
||||
:show-key-selector="true"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
|
@ -1,34 +1,89 @@
|
|||
export const PROVIDERS = [
|
||||
{
|
||||
name: 'awsElasticsearch',
|
||||
labelKey: 'logging.outputProviders.awsElasticsearch',
|
||||
default: { endpoint: {} },
|
||||
},
|
||||
{
|
||||
name: 'azurestorage',
|
||||
labelKey: 'logging.outputProviders.azurestorage',
|
||||
default: { },
|
||||
},
|
||||
{
|
||||
name: 'cloudwatch',
|
||||
labelKey: 'logging.outputProviders.cloudwatch',
|
||||
default: { },
|
||||
},
|
||||
{
|
||||
name: 'datadog',
|
||||
labelKey: 'logging.outputProviders.datadog',
|
||||
default: { },
|
||||
},
|
||||
{
|
||||
name: 'elasticsearch',
|
||||
labelKey: 'logging.outputProviders.elasticsearch',
|
||||
enabled: false,
|
||||
default: {},
|
||||
},
|
||||
{
|
||||
name: 'splunkHec',
|
||||
labelKey: 'logging.outputProviders.splunkHec',
|
||||
enabled: false,
|
||||
default: {},
|
||||
},
|
||||
{
|
||||
name: 'kafka',
|
||||
labelKey: 'logging.outputProviders.kafka',
|
||||
enabled: false,
|
||||
default: { format: { type: 'json' } },
|
||||
name: 'file',
|
||||
labelKey: 'logging.outputProviders.file',
|
||||
default: { },
|
||||
},
|
||||
{
|
||||
name: 'forward',
|
||||
labelKey: 'logging.outputProviders.forward',
|
||||
enabled: false,
|
||||
default: { servers: [{}] },
|
||||
},
|
||||
{
|
||||
name: 'gcs',
|
||||
labelKey: 'logging.outputProviders.gcs',
|
||||
default: { },
|
||||
},
|
||||
{
|
||||
name: 'kafka',
|
||||
labelKey: 'logging.outputProviders.kafka',
|
||||
default: { format: { type: 'json' } },
|
||||
},
|
||||
{
|
||||
name: 'kinesisStream',
|
||||
labelKey: 'logging.outputProviders.kinesisStream',
|
||||
default: { },
|
||||
},
|
||||
{
|
||||
name: 'logdna',
|
||||
labelKey: 'logging.outputProviders.logdna',
|
||||
default: { },
|
||||
},
|
||||
{
|
||||
name: 'logz',
|
||||
labelKey: 'logging.outputProviders.logz',
|
||||
default: { endpoint: {} },
|
||||
},
|
||||
{
|
||||
name: 'loki',
|
||||
labelKey: 'logging.outputProviders.loki',
|
||||
enabled: false,
|
||||
default: { configure_kubernetes_labels: true },
|
||||
}
|
||||
},
|
||||
{
|
||||
name: 'newrelic',
|
||||
labelKey: 'logging.outputProviders.newrelic',
|
||||
default: { },
|
||||
},
|
||||
{
|
||||
name: 'splunkHec',
|
||||
labelKey: 'logging.outputProviders.splunkHec',
|
||||
default: {},
|
||||
},
|
||||
{
|
||||
name: 'sumologic',
|
||||
labelKey: 'logging.outputProviders.sumologic',
|
||||
default: { },
|
||||
},
|
||||
{
|
||||
name: 's3',
|
||||
labelKey: 'logging.outputProviders.s3',
|
||||
default: { },
|
||||
},
|
||||
];
|
||||
|
||||
export default {
|
||||
|
|
|
|||
Loading…
Reference in New Issue