Core Plugins and tasks LogShipper

Core Plugins and tasks LogShipper

Certified

Forward workflow execution logs to one or more desired destinations.

The Log Shipper task extracts logs from the Kestra backend and loads them to desired destinations including Datadog, Elasticsearch, New Relic, OpenTelemetry, AWS CloudWatch, Google Operational Suite, and Azure Monitor.

The task works incrementally in batches:

  1. Determines the starting timestamp using either:
    • The last successfully processed log's timestamp (persisted in KV Store using the offsetKey)
    • Current time minus lookbackPeriod duration if no previous state exists
  2. Sends retrieved logs through configured logExporters
  3. Stores the timestamp of the last processed log to maintain state between executions
  4. Subsequent runs continue from the last stored timestamp

This incremental approach ensures reliable log forwarding without gaps or duplicates.

yaml
type: io.kestra.plugin.ee.core.log.LogShipper

Ship logs to multiple destinations

yaml
id: logShipper
namespace: system

tasks:
  - id: shipLogs
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    lookbackPeriod: P1D
    offsetKey: logShipperOffset
    delete: false
    logExporters:
      - id: file
        type: io.kestra.plugin.ee.core.log.FileLogExporter

      - id: awsCloudWatch
        type: io.kestra.plugin.ee.aws.cloudwatch.LogExporter
        accessKeyId: "{{ secret('AWS_ACCESS_KEY_ID') }}"
        secretKeyId: "{{ secret('AWS_SECRET_KEY_ID') }}"
        region: us-east-1
        logGroupName: kestra
        logStreamName: production

      - id: S3LogExporter
        type: io.kestra.plugin.ee.aws.s3.LogExporter
        accessKeyId: "{{ secret('AWS_ACCESS_KEY_ID') }}"
        secretKeyId: "{{ secret('AWS_SECRET_KEY_ID') }}"
        region: "{{ vars.region }}"
        format: JSON
        bucket: logbucket
        logFilePrefix: kestra-log-file
        maxLinesPerFile: 1000000

      - id: googleOperationalSuite
        type: io.kestra.plugin.ee.gcp.operationalsuite.LogExporter
        projectId: my-gcp-project

      - id: gcs
        type: io.kestra.plugin.ee.gcp.gcs.LogExporter
        projectId: myProjectId
        format: JSON
        maxLinesPerFile: 10000
        bucket: my-bucket
        logFilePrefix: kestra-log-file
        chunk: 1000

      - id: azureMonitor
        type: io.kestra.plugin.ee.azure.monitor.LogExporter
        endpoint: https://endpoint-host.ingest.monitor.azure.com
        tenantId: "{{ secret('AZURE_TENANT_ID') }}"
        clientId: "{{ secret('AZURE_CLIENT_ID') }}"
        clientSecret: "{{ secret('AZURE_CLIENT_SECRET') }}"
        ruleId: dcr-69f0b123041d4d6e9f2bf72aad0b62cf
        streamName: kestraLogs

      - id: azureBlobStorage
        type: io.kestra.plugin.ee.azure.storage.LogExporter
        endpoint: https://myblob.blob.core.windows.net/
        tenantId: "{{ secret('AZURE_TENANT_ID') }}"
        clientId: "{{ secret('AZURE_CLIENT_ID') }}"
        clientSecret: "{{ secret('AZURE_CLIENT_SECRET') }}"
        containerName: logs
        format: JSON
        logFilePrefix: kestra-log-file
        maxLinesPerFile: 1000000
        chunk: 1000

      - id: datadog
        type: io.kestra.plugin.ee.datadog.LogExporter
        basePath: https://http-intake.logs.datadoghq.eu
        apiKey: "{{ secret('DATADOG_API_KEY') }}"

      - id: elasticsearch
        type: io.kestra.plugin.ee.elasticsearch.LogExporter
        indexName: kestra-logs
        connection:
          basicAuth:
            password: "{{ secret('ES_PASSWORD') }}"
            username: kestra_user
          hosts:
            - https://elastic.example.com:9200

      - id: opensearch
        type: io.kestra.plugin.ee.opensearch.LogExporter
        indexName: kestra-logs
        connection:
          basicAuth:
            password: "{{ secret('ES_PASSWORD') }}"
            username: kestra_user
          hosts:
            - https://elastic.example.com:9200

      - id: newRelic
        type: io.kestra.plugin.ee.newrelic.LogExporter
        basePath: https://log-api.newrelic.com
        apiKey: "{{ secret('NEWRELIC_API_KEY') }}"

      - id: openTelemetry
        type: io.kestra.plugin.ee.opentelemetry.LogExporter
        otlpEndpoint: http://otel-collector:4318/v1/logs
        authorizationHeaderName: Authorization
        authorizationHeaderValue: "Bearer {{ secret('OTEL_TOKEN') }}"

triggers:
  - id: dailySchedule
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "0 0 * * *"
    disabled: true
Properties
Min items1

List of log shippers

The list of log shippers to use for sending logs

Definitions

This task is designed to be used when no external tool's log shipper satisfies requirements. You can ship logs to the internal storage and use any other Kestra task to send it to a remote location.

Example

Ship logs to the internal storage

yaml
id: logShipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: logSync
    type: io.kestra.plugin.ee.core.log.LogShipper
    logExporters:
      - id: file
        type: io.kestra.plugin.ee.core.log.FileLogExporter
        format: JSON
        maxLinesPerFile: 100
id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
type*Requiredobject
formatstring
DefaultION
Possible Values
IONJSON

Format of the exported files

This property defines the format of the exported files.

logFilePrefixstring
Defaultkestra-log-file

Prefix of the log files

This property sets the prefix of the log files name. The full file name will be logFilePrefix-localDateTime.json/ion.

maxLinesPerFileintegerstring

Maximum number of lines per file

This property specifies the maximum number of lines per log file.

Formats each log record as a syslog-framed CEF (Common Event Format) message and ships it to a Syslog collector or SIEM over UDP, TCP, or TLS. Records are batched in chunk-sized groups (default 1000); the underlying connection is opened once per execution and reused across the whole batch.

Example

Ship audit logs to a Syslog collector over UDP

yaml
id: audit_log_shipper_udp
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: audit_log_export
    type: io.kestra.plugin.ee.core.log.AuditLogShipper
    resources:
      - FLOW
      - EXECUTION
    lookbackPeriod: P1D
    offsetKey: syslog-audit-offset
    logExporters:
      - id: syslogExporter
        type: io.kestra.plugin.ee.syslog.LogExporter
        host: siem.company.com
        port: 514
        protocol: UDP

Ship execution logs to a Syslog collector over TCP with TLS

yaml
id: log_shipper_tls
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    lookbackPeriod: P1D
    offsetKey: syslog-log-offset
    logExporters:
      - id: syslogExporter
        type: io.kestra.plugin.ee.syslog.LogExporter
        host: siem.company.com
        port: 6514
        protocol: TLS
        trustStorePath: /etc/kestra/certs/siem-truststore.p12
        trustStorePassword: "{{ secret('SYSLOG_TRUSTSTORE_PASSWORD') }}"
host*Requiredstring

Syslog server host

Hostname or IP address of the Syslog collector, e.g. siem.company.com.

id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
type*Requiredobject
appNamestring
Defaultkestra

Application name

Value used for the syslog header APP-NAME field; defaults to kestra.

chunkintegerstring
Default1000

Chunk size

Number of log records buffered per network write; must be between 1 and 10000. Defaults to 1000.

connectionTimeoutstring
DefaultPT10S

Connection timeout

Maximum time to wait when establishing the TCP/TLS connection to the Syslog server, and the read timeout applied afterwards (covers the TLS handshake and any protocol-level reads). A collector that refuses the connection or stalls the handshake fails within this bound; it does not bound a blocked write to a collector that stopped draining data. Not used for UDP, which is fire-and-forget. Must be positive; a non-positive value (e.g. PT0S) falls back to the default. Defaults to PT10S (10 seconds).

deviceProductstring
DefaultKestra

Device product

Value used for the CEF Device Product header field; defaults to Kestra.

deviceVendorstring
DefaultKestra

Device vendor

Value used for the CEF Device Vendor header field; defaults to Kestra.

deviceVersionstring
Default

Device version

Value used for the CEF Device Version header field; empty by default.

facilitystring
DefaultUSER
Possible Values
KERNUSERMAILDAEMONAUTHSYSLOGLPRNEWSUUCPCRONAUTHPRIVFTPNTPAUDITALERTCLOCKLOCAL0LOCAL1LOCAL2LOCAL3LOCAL4LOCAL5LOCAL6LOCAL7

Syslog facility

Syslog facility used to compute the message PRI header value, e.g. USER, LOCAL0..LOCAL7, DAEMON. Defaults to USER.

hostnamestring

Hostname

Value used for the syslog header HOSTNAME field; defaults to the worker's local hostname.

portintegerstring

Syslog server port

TCP/UDP port of the Syslog collector; must be between 1 and 65535. Defaults to 514 for UDP and TCP, and 6514 for TLS.

protocolstring
DefaultTCP
Possible Values
UDPTCPTLS

Transport protocol

Transport used to deliver syslog messages: UDP (fire-and-forget datagrams), TCP (RFC 5425 octet-counting framing over a plain socket), or TLS (same framing over an encrypted socket). Defaults to TCP.

skipCertVerificationbooleanstring
Defaultfalse

Skip TLS certificate verification

When true, disables all TLS certificate verification for the Syslog connection. This is unsafe and should only be used for testing against a server with a self-signed certificate that you cannot add to a truststore. Never enable this in production. Defaults to false.

trustStorePasswordstring

Truststore password

Password protecting the truststore referenced by trustStorePath, if any.

trustStorePathstring

Truststore path

Path to a PKCS12/JKS truststore file, readable from the worker's filesystem, containing the CA certificate(s) needed to trust the Syslog server's TLS certificate. Only used when protocol is TLS; falls back to the JVM default trust store when unset.

trustStoreTypestring
DefaultPKCS12

Truststore type

Type of the truststore file referenced by trustStorePath; defaults to PKCS12.

Exports Kestra log records to an OTLP/HTTP collector in batches; requires otlpEndpoint, can add authentication headers, batches chunk logs per request (default 1000), and emits counters for requests and logs plus a duration timer.

Example

Ship logs using OTLP

yaml
id: log_shipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: OTLPLogExporter
        type: io.kestra.plugin.ee.opentelemetry.LogExporter
        otlpEndpoint: http://localhost:4318/v1/logs
        authorizationHeaderName: Authorization
        authorizationHeaderValue: Bearer token
id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
otlpEndpoint*Requiredstring

OTLP endpoint

HTTP endpoint for the OTLP logs API

type*Requiredobject
authorizationHeaderNamestring

Authentication header name

Header name used for authentication when calling the collector

authorizationHeaderValuestring

Authentication header value

Header value paired with the authentication header name

chunkintegerstring
Default1000

The chunk size for every bulk request

Number of log records per export batch; default 1000

This task is designed to send logs to AWS CloudWatch.

Example

Ship logs to AWS

yaml
id: log_shipper
namespace: system

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: AWSLogExporter
        type: io.kestra.plugin.ee.aws.cloudwatch.LogExporter
        accessKeyId: "{{ secret('AWS_ACCESS_KEY_ID') }}"
        secretKeyId: "{{ secret('AWS_SECRET_KEY_ID') }}"
        region: "{{ vars.region }}"
        logGroupName: group_name
        logStreamName: stream_name

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"
id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
logGroupName*Requiredstring

The name of the log group

logStreamName*Requiredstring

The name of the log stream

region*Requiredstring

AWS region with which the SDK should communicate

type*Requiredobject
accessKeyIdstring

Access Key Id in order to connect to AWS

If no credentials are defined, we will use the default credentials provider chain to fetch credentials.

chunkintegerstring
Default1000

The chunk size for every bulk request

endpointOverridestring

The endpoint with which the SDK should communicate

This property allows you to use a different S3 compatible storage backend.

secretKeyIdstring

Secret Key Id in order to connect to AWS

If no credentials are defined, we will use the default credentials provider chain to fetch credentials.

sessionTokenstring

AWS session token, retrieved from an AWS token service, used for authenticating that this user has received temporary permissions to access a given resource

If no credentials are defined, we will use the default credentials provider chain to fetch credentials.

stsEndpointOverridestring

The AWS STS endpoint with which the SDKClient should communicate

stsRoleArnstring

AWS STS Role

The Amazon Resource Name (ARN) of the role to assume. If set the task will use the StsAssumeRoleCredentialsProvider. If no credentials are defined, we will use the default credentials provider chain to fetch credentials.

stsRoleExternalIdstring

AWS STS External Id

A unique identifier that might be required when you assume a role in another account. This property is only used when an stsRoleArn is defined.

stsRoleSessionDurationstring
DefaultPT15M

AWS STS Session duration

The duration of the role session (default: 15 minutes, i.e., PT15M). This property is only used when an stsRoleArn is defined.

stsRoleSessionNamestring

AWS STS Session name

This property is only used when an stsRoleArn is defined.

This task is designed to send logs to S3.

Example

Ship logs to AWS S3

yaml
id: log_shipper
namespace: system

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: S3LogExporter
        type: io.kestra.plugin.ee.aws.s3.LogExporter
        accessKeyId: "{{ secret('AWS_ACCESS_KEY_ID') }}"
        secretKeyId: "{{ secret('AWS_SECRET_KEY_ID') }}"
        region: "{{ vars.region }}"
        format: JSON
        bucket: logbucket
        logFilePrefix: kestra-log-file
        maxLinesPerFile: 1000000

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"
bucket*Requiredstring

S3 Bucket to upload logs files

The bucket where log files are going to be imported

id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
region*Requiredstring

AWS region with which the SDK should communicate

type*Requiredobject
accessKeyIdstring

Access Key Id in order to connect to AWS

If no credentials are defined, we will use the default credentials provider chain to fetch credentials.

chunkintegerstring
Default1000

The chunk size for every bulk request

endpointOverridestring

The endpoint with which the SDK should communicate

This property allows you to use a different S3 compatible storage backend.

formatstring
DefaultJSON
Possible Values
IONJSON

Format of the exported files

The format of the exported files

logFilePrefixstring
Defaultkestra-log-file

Prefix of the log files

The prefix of the log files name. The full file name will be logFilePrefix-localDateTime.json/ion

maxLinesPerFileintegerstring
Default100000

Maximum number of lines per file

The maximum number of lines per file

secretKeyIdstring

Secret Key Id in order to connect to AWS

If no credentials are defined, we will use the default credentials provider chain to fetch credentials.

sessionTokenstring

AWS session token, retrieved from an AWS token service, used for authenticating that this user has received temporary permissions to access a given resource

If no credentials are defined, we will use the default credentials provider chain to fetch credentials.

stsEndpointOverridestring

The AWS STS endpoint with which the SDKClient should communicate

stsRoleArnstring

AWS STS Role

The Amazon Resource Name (ARN) of the role to assume. If set the task will use the StsAssumeRoleCredentialsProvider. If no credentials are defined, we will use the default credentials provider chain to fetch credentials.

stsRoleExternalIdstring

AWS STS External Id

A unique identifier that might be required when you assume a role in another account. This property is only used when an stsRoleArn is defined.

stsRoleSessionDurationstring
DefaultPT15M

AWS STS Session duration

The duration of the role session (default: 15 minutes, i.e., PT15M). This property is only used when an stsRoleArn is defined.

stsRoleSessionNamestring

AWS STS Session name

This property is only used when an stsRoleArn is defined.

Streams execution logs to an Elasticsearch index via the Bulk API. Uses rendered indexName and chunk for batching (default 1000 records per bulk request); document IDs are derived from log timestamps, so ensure index mappings accept the task log schema.

Example

Ship logs to Elasticsearch

yaml
id: log_shipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: logSync
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: ElasticsearchLogExporter
        type: io.kestra.plugin.ee.elasticsearch.LogExporter
        connection:
          hosts:
            - "http://localhost:9200/"
        indexName: "logs"
connection*Required

Elasticsearch connection settings

Hosts, authentication, headers, and TLS options reused for all requests.

hosts*Requiredarray
SubTypestring
Min items1

Elasticsearch hosts

HTTP/HTTPS endpoints with scheme and port, e.g. https://elasticsearch.com: 9200

basicAuth

Basic auth configuration

passwordstring

Basic auth password

usernamestring

Basic auth username

headersarray
SubTypestring

Extra HTTP headers

Rendered Name: Value pairs sent on every request, e.g. Authorization: Token XYZ

pathPrefixstring

Request path prefix

Prefixes every endpoint (e.g. /my/base) for clusters behind a proxy that requires a base path

strictDeprecationModebooleanstring

Fail on deprecation warnings

If true, any response with Elasticsearch warning headers is treated as an error

targetServerVersionintegerstring
Default8

Target Elasticsearch server major version

Major version used for compatibility headers (Accept and Content-Type). Set to 8 for Elasticsearch 8 clusters or 9 for Elasticsearch 9 clusters.

trustAllSslbooleanstring

Trust all SSL certificates

WARNING — SECURITY RISK: When enabled, disables BOTH TLS certificate validation (TrustAllStrategy) AND hostname verification (NoopHostnameVerifier). This makes the connection vulnerable to man-in-the-middle attacks and must never be used in production. Prefer configuring a proper truststore for self-signed certificates instead.

id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
indexName*Requiredstring

Target index name

Rendered per execution; index must accept the task log schema.

type*Requiredobject
chunkintegerstring
Default1000

Bulk chunk size

Number of log documents per bulk request (default 1000); tune for throughput versus memory.

Pushes task logs to Datadog Logs intake v2 over HTTPS. Batches records (default 1000) and sends them with the DD-API-KEY header against the configured region endpoint.

Example

Ship logs to the internal storage

yaml
id: logShipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: DatadogLogExporter
        type: io.kestra.plugin.ee.datadog.LogExporter
        basePath: https://http-intake.logs.datadoghq.eu
        apiKey: "{{ secret('DATADOG_API_KEY') }}"
apiKey*Requiredstring

Datadog API key

API key sent in the DD-API-KEY header for the target account

basePath*Requiredstring

Datadog logs intake URL

Base URL of the Datadog region (e.g., https://http-intake.logs.datadoghq.com); the task appends /api/v2/logs

id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
type*Requiredobject
chunkintegerstring
Default1000

Batch size

Number of log entries per request; default 1000

options

HTTP client options

Optional HTTP client overrides such as timeouts, proxy, or TLS

allowFailedbooleanstring
Defaultfalse

If true, allow a failed response code (response code >= 400)

allowedResponseCodesarray
SubTypeinteger

List of response code allowed for this request

auth

The authentication to use.

type*Requiredobject
passwordstring

The password for HTTP basic authentication.

usernamestring

The username for HTTP basic authentication.

type*Requiredobject
tokenstring

The token for bearer token authentication.

type*Requiredobject
passwordstring

The password for HTTP Digest authentication.

usernamestring

The username for HTTP Digest authentication.

basicAuthPasswordDeprecatedstring

The password for HTTP basic authentication. Deprecated, use auth property with a BasicAuthConfiguration instance instead.

basicAuthUserDeprecatedstring

The username for HTTP basic authentication. Deprecated, use auth property with a BasicAuthConfiguration instance instead.

connectTimeoutDeprecatedstring
Formatduration

The time allowed to establish a connection to the server before failing.

connectionPoolIdleTimeoutDeprecatedstring
Formatduration

The time an idle connection can remain in the client's connection pool before being closed.

defaultCharsetstring
DefaultUTF-8

The default charset for the request.

enabledTcpExtendedKeepAlivebooleanstring
Defaulttrue

Whether to enable TCP Keep-Alive extended socket options (TCP_KEEPIDLE, TCP_KEEPINTERVAL, TCP_KEEPCOUNT).

Set to false when running on Windows workers, as these extended socket options are not supported by the Windows JDK and will cause connection failures.

followRedirectsbooleanstring
Defaulttrue

Whether redirects should be followed automatically.

logLevelDeprecatedstring
Possible Values
ALLTRACEDEBUGINFOWARNERROROFFNOT_SPECIFIED

The log level for the HTTP client.

logsarray
SubTypestring
Possible Values
REQUEST_HEADERSREQUEST_BODYRESPONSE_HEADERSRESPONSE_BODY

The enabled log.

maxContentLengthDeprecatedinteger

The maximum content length of the response.

proxy

The proxy configuration.

addressstring

The address of the proxy server.

passwordstring

The password for proxy authentication.

portintegerstring

The port of the proxy server.

typestring
DefaultDIRECT
Possible Values
DIRECTHTTPSOCKS

The type of proxy to use.

usernamestring

The username for proxy authentication.

proxyAddressDeprecatedstring

The address of the proxy server.

proxyPasswordDeprecatedstring

The password for proxy authentication.

proxyPortDeprecatedinteger

The port of the proxy server.

proxyTypeDeprecatedstring
Possible Values
DIRECTHTTPSOCKS

The type of proxy to use.

proxyUsernameDeprecatedstring

The username for proxy authentication.

readIdleTimeoutDeprecatedstring
Formatduration

The time allowed for a read connection to remain idle before closing it.

readTimeoutDeprecatedstring
Formatduration

The maximum time allowed for reading data from the server before failing.

ssl

The SSL request options

insecureTrustAllCertificatesbooleanstring

Whether to disable checking of the remote SSL certificate.

Only applies if no trust store is configured. Note: This makes the SSL connection insecure and should only be used for testing. If you are using a self-signed certificate, set up a trust store instead.

timeout

The timeout configuration.

connectTimeoutstring

The time allowed to establish a connection to the server before failing.

readIdleTimeoutstring
DefaultPT5M

The time allowed for a read connection to remain idle before closing it.

servicestring
DefaultLogExporter

Service name

Sets Datadog service; defaults to LogExporter

sourcestring
DefaultKestra

Log source

Sets Datadog ddsource; defaults to Kestra

Streams Kestra log records into an OpenSearch index using bulk requests; control batch size and connection settings, index name is required.

Example

Ship logs to Opensearch

yaml
id: log_shipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: logSync
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: OpensearchLogExporter
        type: io.kestra.plugin.ee.opensearch.LogExporter
        connection:
          hosts:
            - "http://localhost:9200/"
        indexName: "logs"
connection*Required

OpenSearch connection

Shared HTTP settings including hosts, auth, headers, path prefix, and TLS options.

hosts*Requiredarray
SubTypestring

Target OpenSearch HTTP endpoints

One or more full URLs with scheme and port, e.g. https://opensearch.com: 9200.

basicAuth

Authenticate with HTTP basic auth

Provide username (and optionally password) to send Basic credentials with every request.

passwordstring

Basic auth password

Rendered before use; leave empty for anonymous access.

usernamestring

Basic auth username

Rendered before use; required when password is provided.

headersarray
SubTypestring

Send custom HTTP headers

Each entry must be Name: Value, e.g. Authorization: Token XYZ; rendered before being sent on every request.

pathPrefixstring

Prefix all request paths

Prepends this path (e.g. /my/base) to every endpoint; use when OpenSearch sits behind a proxy that requires a base path.

strictDeprecationModebooleanstring

Fail on deprecation warnings

When true, any response carrying a warning header is treated as a failure; disabled unless set.

trustAllSslbooleanstring

Trust all SSL certificates

Ignore certificate chain validation (insecure); useful only for self-signed test clusters. Hostname verification is still enforced. WARNING: enabling this option exposes the connection to man-in-the-middle attacks and must never be used in production environments or when connecting to external or sensitive data stores.

id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
indexName*Requiredstring

Target index name

Rendered before use; must exist or auto-create per cluster settings.

type*Requiredobject
chunkintegerstring
Default1000

Bulk chunk size

Number of log records per bulk request; defaults to 1000.

Sends Flow logs to a Graylog GELF HTTP input over HTTP. Batches records in chunk-sized groups (default 1000) and sets the GELF host field from graylogHost (default Kestra).

Example

Ship logs to Graylog

yaml
id: log_shipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    lookbackPeriod: P1D
    logExporters:
      - id: GraylogExporter
        type: io.kestra.plugin.ee.graylog.LogExporter
        endpoint: "http://localhost:12201/gelf"
        graylogHost: "Kestra"
        chunk: 1000
endpoint*Requiredstring

Graylog GELF HTTP endpoint

URL of the GELF HTTP input, e.g. http://graylog: 12201/gelf

id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
type*Requiredobject
chunkintegerstring
Default1000

Chunk size per batch

Number of log records sent per HTTP batch; default 1000

graylogHoststring
DefaultKestra

Graylog host field

Value used for the GELF host field; defaults to Kestra when not provided

options

HTTP client configuration

Optional HTTP client settings (timeouts, authentication, headers) applied to Graylog requests

allowFailedbooleanstring
Defaultfalse

If true, allow a failed response code (response code >= 400)

allowedResponseCodesarray
SubTypeinteger

List of response code allowed for this request

auth

The authentication to use.

type*Requiredobject
passwordstring

The password for HTTP basic authentication.

usernamestring

The username for HTTP basic authentication.

type*Requiredobject
tokenstring

The token for bearer token authentication.

type*Requiredobject
passwordstring

The password for HTTP Digest authentication.

usernamestring

The username for HTTP Digest authentication.

basicAuthPasswordDeprecatedstring

The password for HTTP basic authentication. Deprecated, use auth property with a BasicAuthConfiguration instance instead.

basicAuthUserDeprecatedstring

The username for HTTP basic authentication. Deprecated, use auth property with a BasicAuthConfiguration instance instead.

connectTimeoutDeprecatedstring
Formatduration

The time allowed to establish a connection to the server before failing.

connectionPoolIdleTimeoutDeprecatedstring
Formatduration

The time an idle connection can remain in the client's connection pool before being closed.

defaultCharsetstring
DefaultUTF-8

The default charset for the request.

enabledTcpExtendedKeepAlivebooleanstring
Defaulttrue

Whether to enable TCP Keep-Alive extended socket options (TCP_KEEPIDLE, TCP_KEEPINTERVAL, TCP_KEEPCOUNT).

Set to false when running on Windows workers, as these extended socket options are not supported by the Windows JDK and will cause connection failures.

followRedirectsbooleanstring
Defaulttrue

Whether redirects should be followed automatically.

logLevelDeprecatedstring
Possible Values
ALLTRACEDEBUGINFOWARNERROROFFNOT_SPECIFIED

The log level for the HTTP client.

logsarray
SubTypestring
Possible Values
REQUEST_HEADERSREQUEST_BODYRESPONSE_HEADERSRESPONSE_BODY

The enabled log.

maxContentLengthDeprecatedinteger

The maximum content length of the response.

proxy

The proxy configuration.

addressstring

The address of the proxy server.

passwordstring

The password for proxy authentication.

portintegerstring

The port of the proxy server.

typestring
DefaultDIRECT
Possible Values
DIRECTHTTPSOCKS

The type of proxy to use.

usernamestring

The username for proxy authentication.

proxyAddressDeprecatedstring

The address of the proxy server.

proxyPasswordDeprecatedstring

The password for proxy authentication.

proxyPortDeprecatedinteger

The port of the proxy server.

proxyTypeDeprecatedstring
Possible Values
DIRECTHTTPSOCKS

The type of proxy to use.

proxyUsernameDeprecatedstring

The username for proxy authentication.

readIdleTimeoutDeprecatedstring
Formatduration

The time allowed for a read connection to remain idle before closing it.

readTimeoutDeprecatedstring
Formatduration

The maximum time allowed for reading data from the server before failing.

ssl

The SSL request options

insecureTrustAllCertificatesbooleanstring

Whether to disable checking of the remote SSL certificate.

Only applies if no trust store is configured. Note: This makes the SSL connection insecure and should only be used for testing. If you are using a self-signed certificate, set up a trust store instead.

timeout

The timeout configuration.

connectTimeoutstring

The time allowed to establish a connection to the server before failing.

readIdleTimeoutstring
DefaultPT5M

The time allowed for a read connection to remain idle before closing it.

Exports Kestra log records to Dash0 via OTLP/HTTP. Authenticates with a Bearer token and optionally routes to a specific dataset. Batches chunk logs per request (default 1000) and emits counters for requests and logs plus a duration timer.

Example

Ship logs to Dash0

yaml
id: log_shipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: dash0LogExporter
        type: io.kestra.plugin.ee.dash0.LogExporter
        endpoint: https://ingress.eu-west-1.aws.dash0.com/v1/logs
        authToken: "{{ secret('DASH0_AUTH_TOKEN') }}"
        dataset: my-dataset
authToken*Requiredstring

Dash0 auth token

Bearer token sent in the Authorization header

endpoint*Requiredstring

Dash0 OTLP ingestion URL

Full OTLP/HTTP endpoint for Dash0 logs (e.g. https://ingress.eu-west-1.aws.dash0.com/v1/logs)

id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
type*Requiredobject
chunkintegerstring
Default1000

Batch size

Number of log records per export batch; default 1000

datasetstring
Defaultdefault

Dash0 dataset

Value for the Dash0-Dataset header; defaults to default

Sends log records to a Splunk HTTP Event Collector endpoint using buffered POST requests. Defaults to chunking 1,000 events per request and sets source to Kestra; requires a HEC token in the Authorization header.

Example

Ship logs to Splunk

yaml
id: log_shipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: SplunkLogExporter
        type: io.kestra.plugin.ee.splunk.LogExporter
        host: YOUR_HOST
        token: "{{ secret('SPLUNK_TOKEN') }}"
host*Requiredstring

Splunk HEC URL

Base URL of the Splunk HTTP Event Collector endpoint (e.g. https://host: 8088); the task appends /services/collector

id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
token*Requiredstring

Splunk HEC token

Token sent in the Authorization header to authenticate with Splunk; store it as a secret

type*Requiredobject
chunkintegerstring
Default1000

Batch size

Number of log events buffered per POST request; defaults to 1000

options

HTTP client options

Optional HTTP client configuration such as timeouts, TLS, or proxy settings

allowFailedbooleanstring
Defaultfalse

If true, allow a failed response code (response code >= 400)

allowedResponseCodesarray
SubTypeinteger

List of response code allowed for this request

auth

The authentication to use.

type*Requiredobject
passwordstring

The password for HTTP basic authentication.

usernamestring

The username for HTTP basic authentication.

type*Requiredobject
tokenstring

The token for bearer token authentication.

type*Requiredobject
passwordstring

The password for HTTP Digest authentication.

usernamestring

The username for HTTP Digest authentication.

basicAuthPasswordDeprecatedstring

The password for HTTP basic authentication. Deprecated, use auth property with a BasicAuthConfiguration instance instead.

basicAuthUserDeprecatedstring

The username for HTTP basic authentication. Deprecated, use auth property with a BasicAuthConfiguration instance instead.

connectTimeoutDeprecatedstring
Formatduration

The time allowed to establish a connection to the server before failing.

connectionPoolIdleTimeoutDeprecatedstring
Formatduration

The time an idle connection can remain in the client's connection pool before being closed.

defaultCharsetstring
DefaultUTF-8

The default charset for the request.

enabledTcpExtendedKeepAlivebooleanstring
Defaulttrue

Whether to enable TCP Keep-Alive extended socket options (TCP_KEEPIDLE, TCP_KEEPINTERVAL, TCP_KEEPCOUNT).

Set to false when running on Windows workers, as these extended socket options are not supported by the Windows JDK and will cause connection failures.

followRedirectsbooleanstring
Defaulttrue

Whether redirects should be followed automatically.

logLevelDeprecatedstring
Possible Values
ALLTRACEDEBUGINFOWARNERROROFFNOT_SPECIFIED

The log level for the HTTP client.

logsarray
SubTypestring
Possible Values
REQUEST_HEADERSREQUEST_BODYRESPONSE_HEADERSRESPONSE_BODY

The enabled log.

maxContentLengthDeprecatedinteger

The maximum content length of the response.

proxy

The proxy configuration.

addressstring

The address of the proxy server.

passwordstring

The password for proxy authentication.

portintegerstring

The port of the proxy server.

typestring
DefaultDIRECT
Possible Values
DIRECTHTTPSOCKS

The type of proxy to use.

usernamestring

The username for proxy authentication.

proxyAddressDeprecatedstring

The address of the proxy server.

proxyPasswordDeprecatedstring

The password for proxy authentication.

proxyPortDeprecatedinteger

The port of the proxy server.

proxyTypeDeprecatedstring
Possible Values
DIRECTHTTPSOCKS

The type of proxy to use.

proxyUsernameDeprecatedstring

The username for proxy authentication.

readIdleTimeoutDeprecatedstring
Formatduration

The time allowed for a read connection to remain idle before closing it.

readTimeoutDeprecatedstring
Formatduration

The maximum time allowed for reading data from the server before failing.

ssl

The SSL request options

insecureTrustAllCertificatesbooleanstring

Whether to disable checking of the remote SSL certificate.

Only applies if no trust store is configured. Note: This makes the SSL connection insecure and should only be used for testing. If you are using a self-signed certificate, set up a trust store instead.

timeout

The timeout configuration.

connectTimeoutstring

The time allowed to establish a connection to the server before failing.

readIdleTimeoutstring
DefaultPT5M

The time allowed for a read connection to remain idle before closing it.

sourcestring
DefaultKestra

Log source

Value for the Splunk source field; defaults to Kestra

Sends buffered Kestra log records to New Relic's /log/v1 endpoint over HTTPS, batching up to chunk (default 1000) records per request. Requires an Api-Key (license or ingest key); HTTP timeouts, retries, and proxies can be tuned via options.

Example

Ship logs to Elasticsearch

yaml
id: log_shipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: NewRelicLogExporter
        type: io.kestra.plugin.ee.newrelic.LogExporter
        basePath: https://log-api.newrelic.com
apiKey*Requiredstring

API or License key

Key sent as Api-Key header for log ingest

basePath*Requiredstring

Log ingest base URL

HTTPS endpoint for New Relic log ingest, e.g. https://log-api.newrelic.com

id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
type*Requiredobject
chunkintegerstring
Default1000

Log batch size

Maximum records per request; defaults to 1000

options

HTTP client options

Optional HTTP settings (timeouts, retries, proxies) for calls to New Relic

allowFailedbooleanstring
Defaultfalse

If true, allow a failed response code (response code >= 400)

allowedResponseCodesarray
SubTypeinteger

List of response code allowed for this request

auth

The authentication to use.

type*Requiredobject
passwordstring

The password for HTTP basic authentication.

usernamestring

The username for HTTP basic authentication.

type*Requiredobject
tokenstring

The token for bearer token authentication.

type*Requiredobject
passwordstring

The password for HTTP Digest authentication.

usernamestring

The username for HTTP Digest authentication.

basicAuthPasswordDeprecatedstring

The password for HTTP basic authentication. Deprecated, use auth property with a BasicAuthConfiguration instance instead.

basicAuthUserDeprecatedstring

The username for HTTP basic authentication. Deprecated, use auth property with a BasicAuthConfiguration instance instead.

connectTimeoutDeprecatedstring
Formatduration

The time allowed to establish a connection to the server before failing.

connectionPoolIdleTimeoutDeprecatedstring
Formatduration

The time an idle connection can remain in the client's connection pool before being closed.

defaultCharsetstring
DefaultUTF-8

The default charset for the request.

enabledTcpExtendedKeepAlivebooleanstring
Defaulttrue

Whether to enable TCP Keep-Alive extended socket options (TCP_KEEPIDLE, TCP_KEEPINTERVAL, TCP_KEEPCOUNT).

Set to false when running on Windows workers, as these extended socket options are not supported by the Windows JDK and will cause connection failures.

followRedirectsbooleanstring
Defaulttrue

Whether redirects should be followed automatically.

logLevelDeprecatedstring
Possible Values
ALLTRACEDEBUGINFOWARNERROROFFNOT_SPECIFIED

The log level for the HTTP client.

logsarray
SubTypestring
Possible Values
REQUEST_HEADERSREQUEST_BODYRESPONSE_HEADERSRESPONSE_BODY

The enabled log.

maxContentLengthDeprecatedinteger

The maximum content length of the response.

proxy

The proxy configuration.

addressstring

The address of the proxy server.

passwordstring

The password for proxy authentication.

portintegerstring

The port of the proxy server.

typestring
DefaultDIRECT
Possible Values
DIRECTHTTPSOCKS

The type of proxy to use.

usernamestring

The username for proxy authentication.

proxyAddressDeprecatedstring

The address of the proxy server.

proxyPasswordDeprecatedstring

The password for proxy authentication.

proxyPortDeprecatedinteger

The port of the proxy server.

proxyTypeDeprecatedstring
Possible Values
DIRECTHTTPSOCKS

The type of proxy to use.

proxyUsernameDeprecatedstring

The username for proxy authentication.

readIdleTimeoutDeprecatedstring
Formatduration

The time allowed for a read connection to remain idle before closing it.

readTimeoutDeprecatedstring
Formatduration

The maximum time allowed for reading data from the server before failing.

ssl

The SSL request options

insecureTrustAllCertificatesbooleanstring

Whether to disable checking of the remote SSL certificate.

Only applies if no trust store is configured. Note: This makes the SSL connection insecure and should only be used for testing. If you are using a self-signed certificate, set up a trust store instead.

timeout

The timeout configuration.

connectTimeoutstring

The time allowed to establish a connection to the server before failing.

readIdleTimeoutstring
DefaultPT5M

The time allowed for a read connection to remain idle before closing it.

This task is designed to send logs to Azure Monitor.

Example

Ship logs to Azure Monitor

yaml
id: log_shipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: AzureLogExporter
        type: io.kestra.plugin.ee.azure.monitor.LogExporter
        endpoint: https://endpoint-host.ingest.monitor.azure.com
        tenantId: tenant_id
        clientId: client_id
        clientSecret: client_secret
        ruleId: dcr-69f0b123041d4d6e9f2bf72aad0b62cf
        streamName: Custom-JSONLogs
endpoint*Requiredstring

Url of the Data Collection Endpoint

id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
ruleId*Requiredstring

Id of the Data Collection Rule

streamName*Requiredstring

Name of the stream

type*Requiredobject
chunkintegerstring
Default1000

The chunk size for every bulk request

clientIdstring

Client ID

Client ID of the Azure service principal. If you don't have a service principal, refer to create a service principal with Azure CLI.

clientSecretstring

Client Secret

Service principal client secret. The tenantId, clientId and clientSecret of the service principal are required for this credential to acquire an access token.

pemCertificatestring

PEM Certificate

Your stored PEM certificate.
The tenantId, clientId and clientCertificate of the service principal are required for this credential to acquire an access token.
tenantIdstring

Tenant ID

This task is designed to send logs to Azure Blob Storage.

Example

Ship logs to Azure Blob Storage

yaml
id: log_shipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: AzureLogExporter
        type: io.kestra.plugin.ee.azure.storage.LogExporter
        endpoint: https://myblob.blob.core.windows.net/
        tenantId: tenant_id
        clientId: client_id
        clientSecret: client_secret
        containerName: logs
        format: JSON
        logFilePrefix: kestra-log-file
        maxLinesPerFile: 1000000
        chunk: 1000
containerName*Requiredstring

Name of the container

Name of the container in the blob storage

endpoint*Requiredstring

Url of the Blob Storage

id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
type*Requiredobject
chunkintegerstring
Default1000

The chunk size for every bulk request

clientIdstring

Client ID

Client ID of the Azure service principal. If you don't have a service principal, refer to create a service principal with Azure CLI.

clientSecretstring

Client Secret

Service principal client secret. The tenantId, clientId and clientSecret of the service principal are required for this credential to acquire an access token.

connectionStringstring

Connection string of the Storage Account

formatstring
DefaultJSON
Possible Values
IONJSON

Format of the exported files

The format of the exported files

logFilePrefixstring
Defaultkestra-log-file

Prefix of the log files

The prefix of the log files name. The full file name will be logFilePrefix-localDateTime.json/ion

maxLinesPerFileintegerstring
Default100000

Maximum number of lines per file

The maximum number of lines per file

pemCertificatestring

PEM Certificate

Your stored PEM certificate.
The tenantId, clientId and clientCertificate of the service principal are required for this credential to acquire an access token.
sasTokenstring

The SAS token to use for authenticating requests

This string should only be the query parameters (with or without a leading '?') and not a full URL.

sharedKeyAccountAccessKeystring

Shared Key access key for authenticating requests

sharedKeyAccountNamestring

Shared Key account name for authenticating requests

tenantIdstring

Tenant ID

Streams Kestra log records into GCS objects in JSON or ION, splitting files after a configurable line count (default 100,000) and buffering writes in chunks (default 1000). Uses service account credentials or impersonation; requires bucket write permission and emits request/file/log metrics.

Example

Ship logs to GCP

yaml
id: log_shipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    lookbackPeriod: P1D
    logExporters:
      - id: GCPLogExporter
        type: io.kestra.plugin.ee.gcp.gcs.LogExporter
        projectId: myProjectId
        format: JSON
        maxLinesPerFile:10000
        bucket: my-bucket
        logFilePrefix: kestra-log-file
        chunk: 1000
bucket*Requiredstring

Target GCS bucket

Existing bucket receiving the log objects; caller must have write access.

id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
type*Requiredobject
chunkintegerstring
Default1000

Batch size per upload request

Number of log lines buffered before writing to GCS; defaults to 1000. Lower to reduce memory or request payload.

formatstring
DefaultJSON
Possible Values
IONJSON

File serialization format

Choose JSON or ION output; defaults to JSON.

impersonatedServiceAccountstring

The GCP service account to impersonate

Service account email to impersonate for API calls. For Cloud Run runner, this value applies to API calls used to create and run the job (--impersonate-service-account equivalent). It does not set the job execution identity (--service-account).

logFilePrefixstring
Defaultkestra-log-file

Log object name prefix

Prefix applied to each object name; final name is prefix-<timestamp>.json|ion. Defaults to kestra-log-file.

maxLinesPerFileintegerstring
Default100000

Maximum lines per file

Rotates to a new object after this many log lines; defaults to 100,000.

projectIdstring

The GCP project ID

scopesarray
SubTypestring
Default["https://www.googleapis.com/auth/cloud-platform"]

The GCP scopes to be used

serviceAccountstring

The GCP service account key

Service account JSON key used to authenticate API calls. For Cloud Run runner job execution identity, this value is used as a fallback for --service-account when runtimeServiceAccount is not provided.

Streams Kestra log records to Google Cloud Logging (Operational Suite) using a service account or impersonation. Batches entries per request (default 1000) and publishes request/log metrics; requires project-level Logging Writer access.

Example

Ship logs to GCP

yaml
id: log_shipper
namespace: company.team

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"

tasks:
  - id: log_export
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: GCPLogExporter
        type: io.kestra.plugin.ee.gcp.operationalsuite.LogExporter
        projectId: myProjectId
id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
type*Requiredobject
chunkintegerstring
Default1000

Batch size per write request

Number of log entries sent in each Cloud Logging write call; defaults to 1000. Lower if you hit payload limits or latency spikes.

impersonatedServiceAccountstring

The GCP service account to impersonate

Service account email to impersonate for API calls. For Cloud Run runner, this value applies to API calls used to create and run the job (--impersonate-service-account equivalent). It does not set the job execution identity (--service-account).

projectIdstring

The GCP project ID

scopesarray
SubTypestring
Default["https://www.googleapis.com/auth/cloud-platform"]

The GCP scopes to be used

serviceAccountstring

The GCP service account key

Service account JSON key used to authenticate API calls. For Cloud Run runner job execution identity, this value is used as a fallback for --service-account when runtimeServiceAccount is not provided.

Sends execution logs in batches to an LTS log stream. Each log record is serialized as JSON and posted to the LTS log-ingestion endpoint POST /v2/{project_id}/lts/groups/{logGroupId}/streams/{logStreamId}/tenant/contents/high-accuracy on the regional lts-access host (port 8102). The high-accuracy variant preserves each record's original nanosecond timestamp instead of stamping the whole batch with one time.

Note: the lts-access ingestion endpoint (port 8102) is reachable from hosts inside the target Huawei Cloud region (or via a jump server); it is not exposed on the public management gateway (port 443).

Authentication supports static AK/SK, pre-obtained security tokens, and inline IAM STS credential exchange via temporaryCredentials. The credential exchange runs once per sendLogs invocation; for very long log streams that outlive the STS durationSeconds, use long-lived AK/SK credentials or renew externally.

Example

Ship Kestra execution logs to Huawei Cloud LTS daily

yaml
id: lts_log_shipper
namespace: company.team

tasks:
  - id: ship_logs
    type: io.kestra.plugin.ee.core.log.LogShipper
    logLevelFilter: INFO
    batchSize: 1000
    lookbackPeriod: P1D
    logExporters:
      - id: huawei_lts
        type: io.kestra.plugin.ee.huawei.lts.LogExporter
        region: eu-west-101
        projectId: "{{ vars.project_id }}"
        accessKeyId: "{{ secret('HUAWEI_ACCESS_KEY_ID') }}"
        secretAccessKey: "{{ secret('HUAWEI_SECRET_ACCESS_KEY') }}"
        logGroupId: "{{ vars.log_group_id }}"
        logStreamId: "{{ vars.log_stream_id }}"

triggers:
  - id: daily
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "@daily"
id*Requiredstring
Validation RegExp^[a-zA-Z0-9][a-zA-Z0-9_-]*
Min length1
logGroupId*Requiredstring

LTS log group ID.

The UUID of the LTS log group to ingest into. Found in the LTS console under Log Groups.

logStreamId*Requiredstring

LTS log stream ID.

The UUID of the LTS log stream within logGroupId. Found in the LTS console under Log Streams.

projectId*Requiredstring

Huawei Cloud Project ID.

Identifies the region-scoped project. Required to build the LTS ingest URL.

region*Requiredstring

Huawei Cloud region.

Region identifier such as eu-west-101, ap-southeast-1, or cn-north-4.

type*Requiredobject
accessKeyIdstring

Access Key (AK) used to authenticate with Huawei Cloud.

Huawei Cloud access key used together with secretAccessKey to sign API requests. Required for AK/SK-based authentication; not required when using temporaryCredentials. Sensitive — always provide via {{ secret('NAME') }}.

chunkintegerstring
Default1000

Number of log records per LTS ingest request.

Defaults to 1000. Reduce if individual log records are very large.

domainIdstring

Huawei Cloud Account Domain ID.

Required only when using temporaryCredentials with domain-scoped token scope.

endpointOverridestring

Override the LTS service endpoint URL.

Replaces the region-derived endpoint (e.g. https://lts-access.eu-west-101.myhuaweicloud.eu). Intended for testing against a local WireMock server; do not set in production.

secretAccessKeystring

Secret Key (SK) used to authenticate with Huawei Cloud.

Huawei Cloud secret key paired with accessKeyId. Sensitive — always provide via {{ secret('NAME') }}.

securityTokenstring

Pre-obtained Huawei Cloud security token.

When set, requests are authenticated with this token in the X-Auth-Token header instead of AK/SK signing. Sensitive.

temporaryCredentialsstring

Inline IAM credential exchange.

When set, the connection layer calls the Huawei IAM STS API once per task execution and uses the returned temporary AK/SK + security token. The exchange runs once at invocation start; credentials will expire mid-run for streams that outlive durationSeconds.

authMethodstring
DefaultPASSWORD
Possible Values
PASSWORDTOKEN

Authentication method.

Controls which credentials are used to obtain the session token before exchanging for temporary STS credentials.

  • PASSWORD (default): provide username, password, and domainName.
  • TOKEN: provide an existing iamToken (X-Auth-Token).
domainNamestring

Account domain name (PASSWORD method only).

The Huawei Cloud account name (domain name) that owns the IAM user. Required when authMethod is PASSWORD. Visible in the Huawei Cloud console under My Credentials → Domain Name.

durationSecondsintegerstring
Default900

Lifetime of the temporary credentials in seconds.

How long the returned temporary AK/SK/security-token should remain valid. Huawei Cloud accepts values between 900 (15 minutes) and 86400 (24 hours). Defaults to 900 seconds.

endpointSuffixstring
Defaultmyhuaweicloud.com

Huawei Cloud IAM endpoint suffix.

Domain suffix used to build the IAM endpoint URL when no explicit endpoint override is set. Defaults to myhuaweicloud.com. Set to myhuaweicloud.eu for the European sovereign cloud (region eu-west-101 / EU-Dublin).

iamTokenstring

IAM token to exchange (TOKEN method only).

An existing Huawei Cloud X-Auth-Token to exchange for temporary STS credentials. Required when authMethod is TOKEN. Sensitive — always provide via {{ secret('NAME') }}.

passwordstring

IAM password (PASSWORD method only).

Password for the IAM user identified by username. Required when authMethod is PASSWORD. Sensitive — always provide via {{ secret('NAME') }}.

projectNamestring

Project name for project-scoped tokens (PASSWORD method only).

Overrides the project name used for scope=PROJECT token requests. Defaults to the task's region value when omitted, which is correct for most regions.

scopestring
DefaultPROJECT
Possible Values
PROJECTDOMAIN

Token scope (PASSWORD method only).

Scope of the session token obtained during password authentication.

  • PROJECT (default): token is scoped to the project matching projectName (or the task's region when projectName is omitted). Use for most downstream tasks.
  • DOMAIN: token is scoped to the domain.
usernamestring

IAM username (PASSWORD method only).

Huawei Cloud IAM username. Required when authMethod is PASSWORD.

Delete logs after export

The log shipper will delete the exported logs

Execution to search

The execution ID to use to filter logs

Flow to search

The flow ID to use to filter logs

DefaultINFO

Log level to send

This property specifies the minimum log level to send.

DefaultP1D

Starting duration before now

If no previous execution or state exists, the fetch start date is set to the current time minus this duration

Maximum size of messages in logs

Set the maximum size of the message inside logs (in number of characters). If set, it will truncate messages that are longer than the maximum message size.

Namespace to search

The namespace to use to filter logs

Prefix of the KVStore key

The prefix of the KVStore key that contains the last execution's end fetched date

Reference (ref) of the pluginDefaults to apply to this task.

Formatdate-time

The zoned date-time of the last fetched log, used as the starting date for the next execution

The outputs generated by each log shipper

Definitions

The number of logs fetched.