Adding new logging Outputs and ClusterOutputs

- Also added ssl/ca to Forward, Loki and Splunk

rancher/dashboard#1191
This commit is contained in:
Cody Jackson 2020-12-03 17:01:59 -07:00
parent 4919c76d9a
commit a1c0b943f0
18 changed files with 1093 additions and 29 deletions

View File

@ -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:

View File

@ -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

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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 {