Kubernetes
Collect indicators, objects and log data of container and Kubernetes and report them to Guance.
Configuration¶
Preconditions¶
- At present, container supported Docker/Containerd/CRI-O runtime
- Docker v17.04 and above should be installed, Container v15.1 and above should be installed, CRI-O 1.20.1 and above should be installed.
- Collecting Kubernetes data requires the DataKit to be deployed as a DaemonSet.
Info
- Container collection supports both Docker and Containerd runtime Version-1.5.7, and both are enabled by default.
In the case of a pure Docker or Containerd environment, the DataKit can only be installed on the host machine.
Go to the conf.d/container directory under the DataKit installation directory, copy container.conf.sample and name it container.conf. Examples are as follows:
[inputs.container]
endpoints = [
"unix:///var/run/docker.sock",
"unix:///var/run/containerd/containerd.sock",
"unix:///var/run/crio/crio.sock",
]
enable_container_metric = true
enable_k8s_metric = true
enable_pod_metric = false
enable_k8s_event = true
enable_k8s_node_local = true
enable_collect_k8s_job = true
## Add resource Label as Tags (container use Pod Label), need to specify Label keys.
## e.g. ["app", "name"]
# extract_k8s_label_as_tags_v2 = []
# extract_k8s_label_as_tags_v2_for_metric = []
## Containers logs to include and exclude, default collect all containers. Globs accepted.
container_include_log = []
container_exclude_log = ["image:*logfwd*", "image:*datakit*"]
## Pods metric to include and exclude, default collect all pods. Globs accepted.
pod_include_metric = []
pod_exclude_metric = []
logging_enable_multiline = true
logging_auto_multiline_detection = true
logging_auto_multiline_extra_patterns = []
## Only retain the fields specified in the whitelist.
logging_field_white_list = []
## Removes ANSI escape codes from text strings.
logging_remove_ansi_escape_codes = false
## Whether to collect logs from the begin of the file.
logging_file_from_beginning = false
## The maximum allowed number of open files, default is 500. If it is -1, it means no limit.
# logging_max_open_files = 500
## Search logging interval, default "60s".
#logging_search_interval = ""
## Log collection configures additional source matching, and the regular source will be renamed.
[inputs.container.logging_extra_source_map]
# source_regexp = "new_source"
## Log collection with multiline configuration as specified by the source.
[inputs.container.logging_source_multiline_map]
# source = '''^\d{4}'''
[inputs.container.tags]
# some_tag = "some_value"
# more_tag = "some_other_value"
Can be turned on by ConfigMap Injection Collector Configuration or Config ENV_DATAKIT_INPUTS .
Can also be turned on by environment variables, (needs to be added as the default collector in ENV_DEFAULT_ENABLED_INPUTS):
-
ENV_INPUT_CONTAINER_ENDPOINTS
Append to container endpoints
Type: List
input.conf:
endpoints
Example: "
unix:///var/run/docker.sock,unix:///var/run/containerd/containerd.sock,unix:///var/run/crio/crio.sock
" -
ENV_INPUT_CONTAINER_ENABLE_CONTAINER_METRIC
Start container index collection
Type: Boolean
input.conf:
enable_container_metric
Default: true
-
ENV_INPUT_CONTAINER_ENABLE_K8S_METRIC
Start k8s index collection
Type: Boolean
input.conf:
enable_k8s_metric
Default: true
-
ENV_INPUT_CONTAINER_ENABLE_POD_METRIC
Turn on Pod index collection
Type: Boolean
input.conf:
enable_pod_metric
Default: false
-
ENV_INPUT_CONTAINER_ENABLE_K8S_EVENT
Enable event collection mode
Type: Boolean
input.conf:
enable_k8s_event
Default: true
-
ENV_INPUT_CONTAINER_ENABLE_K8S_NODE_LOCAL
Enable sub-Node collection mode, where the DataKit deployed on each Node independently collects the resources of the current Node. Version-1.5.7 Need new
RABC
linkType: Boolean
input.conf:
enable_k8s_node_local
Default: true
-
ENV_INPUT_CONTAINER_ENABLE_COLLECT_KUBE_JOB
Turn off collection of Kubernetes Job resources (including metrics data and object data)
Type: Boolean
input.conf:
enable_collect_kube_job
Default: true
-
ENV_INPUT_CONTAINER_EXTRACT_K8S_LABEL_AS_TAGS_V2
Append the labels of the resource to the tag of the non-metric (like object and logging) data. Label keys should be specified, if there is only one key and it is an empty string (e.g. [""]), all labels will be added to the tag. The container will inherit the Pod labels. If the key of the label has the dot character, it will be changed to a horizontal line
Type: JSON
input.conf:
extract_k8s_label_as_tags_v2
Example:
["app","name"]
-
ENV_INPUT_CONTAINER_EXTRACT_K8S_LABEL_AS_TAGS_V2_FOR_METRIC
Append the labels of the resource to the tag of the metric data. Label keys should be specified, if there is only one key and it is an empty string (e.g. [""]), all labels will be added to the tag. The container will inherit the Pod labels. If the key of the label has the dot character, it will be changed to a horizontal line
Type: JSON
input.conf:
extract_k8s_label_as_tags_v2_for_metric
Example:
["app","name"]
-
ENV_INPUT_CONTAINER_ENABLE_AUTO_DISCOVERY_OF_PROMETHEUS_POD_ANNOTATIONS
Deprecated. Whether to turn on Prometheus Pod Annotations and collect metrics automatically
Type: Boolean
input.conf:
enable_auto_discovery_of_prometheus_pod_annotations
Default: false
-
ENV_INPUT_CONTAINER_ENABLE_AUTO_DISCOVERY_OF_PROMETHEUS_SERVICE_ANNOTATIONS
Deprecated. Whether to turn on Prometheus Service Annotations and collect metrics automatically
Type: Boolean
input.conf:
enable_auto_discovery_of_prometheus_service_annotations
Default: false
-
ENV_INPUT_CONTAINER_ENABLE_AUTO_DISCOVERY_OF_PROMETHEUS_POD_MONITORS
Deprecated. Whether to turn on automatic discovery of Prometheus PodMonitor CRD and collection of metrics, see [Prometheus-Operator CRD doc](kubernetes-prometheus-operator-crd
Type: Boolean
input.conf:
enable_auto_discovery_of_prometheus_pod_monitors
Default: false
-
ENV_INPUT_CONTAINER_ENABLE_AUTO_DISCOVERY_OF_PROMETHEUS_SERVICE_MONITORS
Deprecated. Whether to turn on automatic discovery of Prometheus ServiceMonitor CRD and collection of metrics, see [Prometheus-Operator CRD doc](kubernetes-prometheus-operator-crd
Type: Boolean
input.conf:
enable_auto_discovery_of_prometheus_service_monitors
Default: false
-
ENV_INPUT_CONTAINER_CONTAINER_MAX_CONCURRENT
Maximum number of concurrency when collecting container data, recommended to be turned on only when the collection delay is large
Type: Int
input.conf:
container_max_concurrent
Default: cpu cores + 1
-
ENV_INPUT_CONTAINER_CONTAINER_INCLUDE_LOG
Include condition of container log, filtering with image
Type: List
input.conf:
container_include_log
Example:
"image:pubrepo.jiagouyun.com/datakit/logfwd*"
-
ENV_INPUT_CONTAINER_CONTAINER_EXCLUDE_LOG
Exclude condition of container log, filtering with image
Type: List
input.conf:
container_exclude_log
Example:
"image:pubrepo.jiagouyun.com/datakit/logfwd*"
-
ENV_INPUT_CONTAINER_POD_INCLUDE_METRIC
Include condition of pod metrics, filtering with namespace
Type: List
input.conf:
pod_include_metric
Example:
"namespace:datakit*"
-
ENV_INPUT_CONTAINER_POD_EXCLUDE_METRIC
Exclude condition of pod metrics, filtering with namespace
Type: List
input.conf:
pod_exclude_metric
Example:
"namespace:kube-system"
-
ENV_INPUT_CONTAINER_LOGGING_SEARCH_INTERVAL
The time interval of log discovery, that is, how often logs are retrieved. If the interval is too long, some logs with short survival will be ignored
Type: Duration
input.conf:
logging_search_interval
Default: 60s
-
ENV_INPUT_CONTAINER_LOGGING_EXTRA_SOURCE_MAP
Log collection configures additional source matching, and the regular source will be renamed
Type: Map
input.conf:
logging_extra_source_map
Example:
source_regex*=new_source,regex*=new_source2
-
ENV_INPUT_CONTAINER_LOGGING_SOURCE_MULTILINE_MAP_JSON
Log collection with multiline configuration as specified by the source
Type: JSON
input.conf:
logging_source_multiline_map
Example:
{"source_nginx":"^\d{4}", "source_redis":"^[A-Za-z_]"}
-
ENV_INPUT_CONTAINER_LOGGING_AUTO_MULTILINE_DETECTION
Whether the automatic multi-line mode is turned on for log collection; the applicable multi-line rules will be matched in the patterns list after it is turned on
Type: Boolean
input.conf:
logging_auto_multiline_detection
Default: false
-
ENV_INPUT_CONTAINER_LOGGING_AUTO_MULTILINE_EXTRA_PATTERNS_JSON
Automatic multi-line pattern pattens list for log collection, supporting manual configuration of multiple multi-line rules
Type: JSON
input.conf:
logging_auto_multiline_extra_patterns
Example:
["^\d{4}-\d{2}", "^[A-Za-z_]"]
Default: For more default rules, see doc
-
ENV_INPUT_CONTAINER_LOGGING_REMOVE_ANSI_ESCAPE_CODES
Remove
ansi
escape codes and color characters, referred toansi-decode
docType: Boolean
input.conf:
logging_remove_ansi_escape_codes
Default: false
-
ENV_INPUT_CONTAINER_LOGGING_FILE_FROM_BEGINNING_THRESHOLD_SIZE
Decide whether or not to from_beginning based on the file size, if the file size is smaller than this value when the file is found, start the collection from the begin
Type: Int
input.conf:
logging_file_from_beginning_threshold_size
Default: 20,000,000
-
ENV_INPUT_CONTAINER_LOGGING_FILE_FROM_BEGINNING
Whether to collect logs from the begin of the file
Type: Boolean
input.conf:
logging_file_from_beginning
Default: false
-
ENV_INPUT_CONTAINER_LOGGING_MAX_OPEN_FILES
The maximum allowed number of open files. If it is set to -1, it means there is no limit.
Type: Int
input.conf:
logging_max_open_files
Default: 500
-
ENV_INPUT_CONTAINER_LOGGING_FIELD_WHITE_LIST
"Only retain the fields specified in the whitelist."
Type: List
input.conf:
logging_field_white_list
Example:
'["service","container_id"]'
-
ENV_INPUT_CONTAINER_TAGS
Customize tags. If there is a tag with the same name in the configuration file, it will be overwritten
Type: Map
input.conf:
tags
Example: tag1=value1,tag2=value2
Additional description of environment variables:
-
ENV_INPUT_CONTAINER_TAGS: If there is a tag with the same name in the configuration file (container.conf), it will be overwritten by the configuration here.
-
ENV_INPUT_CONTAINER_LOGGING_EXTRA_SOURCE_MAP: Specifying the replacement source with the argument format
regular expression=new_source
, which is replaced by new_source when a source matches the regular expression. If the replacement is successful, the source( Version-1.4.7)configured inannotations/labels
is no longer used. If you want to make an exact match, you need to use^
and$
to enclose the content. For example, if a regular expression is written asdatakit
, it can not only match the worddatakit
, but also matchdatakit123
; Written as^datakit$
, you can only matchdatakit
. -
ENV_INPUT_CONTAINER_LOGGING_SOURCE_MULTILINE_MAP_JSON: Used to specify the mapping of source to multi-row configuration. If a log is not configured with
multiline_match
, the correspondingmultiline_match
is found and used here based on its source. Because themultiline_match
value is a regular expression, it is more complex, so the value format is a JSON string that can be coded and compressed into a single line using json.cn.
Note
- Object data collection interval is 5 minutes and metric data collection interval is 20 seconds. Configuration is not supported for the time being.
- Acquired log has a maximum length of ~800KB per line (including after
multiline_match
processing), the excess will split into new logging lines.
Docker and Containerd Sock File Configuration¶
If the sock path of Docker or Containerd is not the default, you need to specify the sock file path. According to different deployment methods of DataKit, the methods are different. Take Containerd as an example:
Modify the containerd_address
configuration entry of container.conf to set it to the corresponding sock path.
Change the volumes containerd-socket
of DataKit.yaml, mount the new path into the DataKit, and configure the environment variablesENV_INPUT_CONTAINER_ENDPOINTS
:
# add envs
- env:
- name: ENV_INPUT_CONTAINER_ENDPOINTS
value: ["unix:///path/to/new/containerd/containerd.sock"]
# modify mountPath
- mountPath: /path/to/new/containerd/containerd.sock
name: containerd-socket
readOnly: true
# modify volumes
volumes:
- hostPath:
path: /path/to/new/containerd/containerd.sock
name: containerd-socket
Environment Variables ENV_INPUT_CONTAINER_ENDPOINTS
is added to the existing endpoints configuration, and the actual endpoints configuration may have many items. The collector will remove duplicates and connect and collect them one by one.
The default endpoints configuration is:
endpoints = [
"unix:///var/run/docker.sock",
"unix:///var/run/containerd/containerd.sock",
"unix:///var/run/crio/crio.sock",
]
Using Environment Variables ENV_INPUT_CONTAINER_ENDPOINTS
is["unix:///path/to/new//run/containerd.sock"]
,The final endpoints configuration is as follows:
endpoints = [
"unix:///var/run/docker.sock",
"unix:///var/run/containerd/containerd.sock",
"unix:///var/run/crio/crio.sock",
"unix:///path/to/new//run/containerd.sock",
]
The collector will connect and collect these containers during runtime. If the sock file does not exist, an error log will be output when the first connection fails, which does not affect subsequent collection.
Prometheus Exporter Metrics Collection¶
If the Pod/container has exposed Prometheus metrics, there are two ways to collect them, see here.
Log Collection¶
See here for the relevant configuration of log collection.
Metric¶
For all of the following data collections, a global tag named host
is appended by default (the tag value is the host name of the DataKit), or other tags can be specified in the configuration by [inputs.container.tags]
:
docker_containers
¶
The metric of containers, only supported Running status.
- Tags
Tag | Description |
---|---|
aws_ecs_cluster_name | Cluster name of the AWS ECS. |
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
container_id | Container ID |
container_name | Container name from k8s (label io.kubernetes.container.name ). If empty then use $container_runtime_name. |
container_runtime | Container runtime (this container from Docker/Containerd/cri-o). |
container_runtime_name | Container name from runtime (like 'docker ps'). If empty then use 'unknown'. |
container_runtime_version | Container runtime version. |
container_type | The type of the container (this container is created by Kubernetes/Docker/Containerd/cri-o). |
daemonset | The name of the DaemonSet which the object belongs to. |
deployment | The name of the Deployment which the object belongs to. |
image | The full name of the container image, example nginx.org/nginx:1.21.0 . |
image_name | The name of the container image, example nginx.org/nginx . |
image_short_name | The short name of the container image, example nginx . |
image_tag | The tag of the container image, example 1.21.0 . |
namespace | The namespace of the container (label io.kubernetes.pod.namespace ). |
pod_name | The pod name of the container (label io.kubernetes.pod.name ). |
pod_uid | The pod uid of the container (label io.kubernetes.pod.uid ). |
state | Container status (only Running). |
statefulset | The name of the StatefulSet which the object belongs to. |
task_arn | The task arn of the AWS Fargate. |
task_family | The task family of the AWS fargate. |
task_version | The task version of the AWS fargate. |
- Metrics
Metric | Description |
---|---|
block_read_byte | Total number of bytes read from the container file system (only supported docker). Type: int Unit: digital,B |
block_write_byte | Total number of bytes wrote to the container file system (only supported docker). Type: int Unit: digital,B |
cpu_limit_millicores | The CPU limit of the container, measured in milli-cores. Type: int Unit: milli-cores |
cpu_numbers | The number of CPU cores on the system host. Type: int Unit: count |
cpu_request_millicores | The CPU request of the container, measured in milli-cores (only supported in Kubernetes). Type: int Unit: milli-cores |
cpu_usage | The actual CPU usage on the system host (percentage). Type: float Unit: percent,percent |
cpu_usage_base100 | The normalized CPU usage, with a maximum value of 100%. It is calculated as the number of CPU cores multiplied by 100. Type: float Unit: percent,percent |
cpu_usage_base_limit | The CPU usage based on the CPU limit (percentage). Type: float Unit: percent,percent |
cpu_usage_base_request | The CPU usage based on the CPU request (percentage) (only supported in Kubernetes). Type: float Unit: percent,percent |
cpu_usage_millicores | The CPU usage of the container, measured in milli-cores. Type: int Unit: milli-cores |
mem_capacity | The total memory on the system host. Type: int Unit: digital,B |
mem_limit | The memory limit of the container. Type: int Unit: digital,B |
mem_request | The memory request of the container (only supported in Kubernetes). Type: int Unit: digital,B |
mem_usage | The actual memory usage of the container. Type: int Unit: digital,B |
mem_used_percent | The memory usage percentage based on the total memory of the system host. Type: float Unit: percent,percent |
mem_used_percent_base_limit | The memory usage percentage based on the memory limit. Type: float Unit: percent,percent |
mem_used_percent_base_request | The memory usage percentage based on the memory request (only supported in Kubernetes). Type: float Unit: percent,percent |
network_bytes_rcvd | Total number of bytes received from the network (only count the usage of the main process in the container, excluding loopback). Type: int Unit: digital,B |
network_bytes_sent | Total number of bytes send to the network (only count the usage of the main process in the container, excluding loopback). Type: int Unit: digital,B |
kubernetes
¶
The count of the Kubernetes resource.
- Tags
Tag | Description |
---|---|
namespace | namespace |
node_name | NodeName is a request to schedule this pod onto a specific node (only supported Pod and Container). |
- Metrics
Metric | Description |
---|---|
container | Container count Type: int Unit: - |
cronjob | CronJob count Type: int Unit: - |
daemonset | Service count Type: int Unit: - |
deployment | Deployment count Type: int Unit: - |
endpoint | Endpoint count Type: int Unit: - |
job | Job count Type: int Unit: - |
node | Node count Type: int Unit: - |
pod | Pod count Type: int Unit: - |
replicaset | ReplicaSet count Type: int Unit: - |
service | Service count Type: int Unit: - |
statefulset | StatefulSet count Type: int Unit: - |
kube_cronjob
¶
The metric of the Kubernetes CronJob.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
cronjob | Name must be unique within a namespace. |
namespace | Namespace defines the space within each name must be unique. |
uid | The UID of CronJob. |
- Metrics
Metric | Description |
---|---|
spec_suspend | This flag tells the controller to suspend subsequent executions. Type: bool Unit: - |
kube_daemonset
¶
The metric of the Kubernetes DaemonSet.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
daemonset | Name must be unique within a namespace. |
namespace | Namespace defines the space within each name must be unique. |
uid | The UID of DaemonSet. |
- Metrics
Metric | Description |
---|---|
daemons_available | The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds). Type: int Unit: count |
daemons_unavailable | The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds). Type: int Unit: count |
desired | The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). Type: int Unit: count |
misscheduled | The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. Type: int Unit: count |
ready | The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready. Type: int Unit: count |
scheduled | The number of nodes that are running at least one daemon pod and are supposed to run the daemon pod. Type: int Unit: count |
updated | The total number of nodes that are running updated daemon pod. Type: int Unit: count |
kube_deployment
¶
The metric of the Kubernetes Deployment.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
deployment | Name must be unique within a namespace. |
namespace | Namespace defines the space within each name must be unique. |
uid | The UID of Deployment. |
- Metrics
Metric | Description |
---|---|
replicas | Total number of non-terminated pods targeted by this deployment (their labels match the selector). Type: int Unit: count |
replicas_available | Total number of available pods (ready for at least minReadySeconds) targeted by this deployment. Type: int Unit: count |
replicas_desired | Number of desired pods for a Deployment. Type: int Unit: count |
replicas_ready | The number of pods targeted by this Deployment with a Ready Condition. Type: int Unit: count |
replicas_unavailable | Total number of unavailable pods targeted by this deployment. Type: int Unit: count |
replicas_updated | Total number of non-terminated pods targeted by this deployment that have the desired template spec. Type: int Unit: count |
rollingupdate_max_surge | The maximum number of pods that can be scheduled above the desired number of pods. Type: int Unit: count |
rollingupdate_max_unavailable | The maximum number of pods that can be unavailable during the update. Type: int Unit: count |
kube_dfpv
¶
The metric of the Kubernetes PersistentVolume.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
name | The dfpv name, consists of pvc name and pod name |
namespace | The namespace of Pod and PVC. |
node_name | Reference to the Node. |
pod_name | Reference to the Pod. |
pvc_name | Reference to the PVC. |
volume_mount_name | The name given to the Volume. |
- Metrics
Metric | Description |
---|---|
available | AvailableBytes represents the storage space available (bytes) for the filesystem. Type: int Unit: digital,B |
capacity | CapacityBytes represents the total capacity (bytes) of the filesystems underlying storage. Type: int Unit: digital,B |
inodes | Inodes represents the total inodes in the filesystem. Type: int Unit: count |
inodes_free | InodesFree represents the free inodes in the filesystem. Type: int Unit: count |
inodes_used | InodesUsed represents the inodes used by the filesystem. Type: int Unit: count |
used | UsedBytes represents the bytes used for a specific task on the filesystem. Type: int Unit: digital,B |
kube_endpoint
¶
The metric of the Kubernetes Endpoints.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
endpoint | Name must be unique within a namespace. |
namespace | Namespace defines the space within each name must be unique. |
uid | The UID of Endpoint. |
- Metrics
Metric | Description |
---|---|
address_available | Number of addresses available in endpoint. Type: int Unit: count |
address_not_ready | Number of addresses not ready in endpoint. Type: int Unit: count |
kube_job
¶
The metric of the Kubernetes Job.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
job | Name must be unique within a namespace. |
namespace | Namespace defines the space within each name must be unique. |
uid | The UID of Job. |
- Metrics
Metric | Description |
---|---|
active | The number of actively running pods. Type: int Unit: count |
completion_failed | The job has failed its execution. Type: int Unit: count |
completion_succeeded | The job has completed its execution. Type: int Unit: count |
failed | The number of pods which reached phase Failed. Type: int Unit: count |
succeeded | The number of pods which reached phase Succeeded. Type: int Unit: count |
kube_node
¶
The metric of the Kubernetes Node.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
node | Name must be unique within a namespace |
uid | The UID of Node. |
- Metrics
Metric | Description |
---|---|
cpu_allocatable | The allocatable CPU of a node that is available for scheduling. Type: int Unit: - |
cpu_capacity | The CPU capacity of a node. Type: int Unit: - |
ephemeral_storage_allocatable | The allocatable ephemeral-storage of a node that is available for scheduling. Type: int Unit: - |
ephemeral_storage_capacity | The ephemeral-storage capacity of a node. Type: int Unit: - |
memory_allocatable | The allocatable memory of a node that is available for scheduling. Type: int Unit: - |
memory_capacity | The memory capacity of a node. Type: int Unit: - |
pods_allocatable | The allocatable pods of a node that is available for scheduling. Type: int Unit: - |
pods_capacity | The pods capacity of a node. Type: int Unit: - |
kube_pod
¶
The metric of the Kubernetes Pod.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
daemonset | The name of the DaemonSet which the object belongs to. |
deployment | The name of the Deployment which the object belongs to. |
namespace | Namespace defines the space within each name must be unique. |
node_name | NodeName is a request to schedule this pod onto a specific node. |
pod | Name must be unique within a namespace. |
pod_name | Renamed from 'pod'. |
statefulset | The name of the StatefulSet which the object belongs to. |
uid | The UID of pod. |
- Metrics
Metric | Description |
---|---|
cpu_limit_millicores | The total CPU limit (in millicores) across all containers in this Pod. Note: This value is the sum of all container limit values, as Pods do not have a direct limit value. Type: int Unit: milli-cores |
cpu_number | The total number of CPUs on the node where the Pod is running. Type: int Unit: count |
cpu_request_millicores | The total CPU request (in millicores) across all containers in this Pod. Note: This value is the sum of all container request values, as Pods do not have a direct request value. Type: int Unit: milli-cores |
cpu_usage | The total CPU usage across all containers in this Pod. Type: float Unit: percent,percent |
cpu_usage_base100 | The normalized CPU usage, with a maximum of 100%. Type: float Unit: percent,percent |
cpu_usage_base_limit | The normalized CPU usage, with a maximum of 100%, based on the CPU limit. Type: float Unit: percent,percent |
cpu_usage_base_request | The normalized CPU usage, with a maximum of 100%, based on the CPU request. Type: float Unit: percent,percent |
cpu_usage_millicores | The total CPU usage (in millicores) averaged over the sample window for all containers. Type: int Unit: milli-cores |
ephemeral_storage_available_bytes | The storage space available (bytes) for the filesystem. Type: int Unit: digital,B |
ephemeral_storage_capacity_bytes | The total capacity (bytes) of the filesystems underlying storage. Type: int Unit: digital,B |
ephemeral_storage_used_bytes | The bytes used for a specific task on the filesystem. Type: int Unit: digital,B |
mem_capacity | The total memory capacity of the host machine. Type: int Unit: digital,B |
mem_limit | The total memory limit across all containers in this Pod. Note: This value is the sum of all container limit values, as Pods do not have a direct limit value. Type: int Unit: digital,B |
mem_request | The total memory request across all containers in this Pod. Note: This value is the sum of all container request values, as Pods do not have a direct request value. Type: int Unit: digital,B |
mem_rss | The total RSS memory usage of all containers in this Pod, which is not supported by metrics-server. Type: int Unit: digital,B |
mem_usage | The total memory usage of all containers in this Pod. Type: int Unit: digital,B |
mem_used_percent | The percentage of memory usage based on the host machine’s total memory capacity. Type: float Unit: percent,percent |
mem_used_percent_base_limit | The percentage of memory usage based on the memory limit. Type: float Unit: percent,percent |
mem_used_percent_base_request | The percentage of memory usage based on the memory request. Type: float Unit: percent,percent |
memory_capacity | The total memory in the host machine (Deprecated use mem_capacity ).Type: int Unit: digital,B |
memory_usage_bytes | The sum of the memory usage of all containers in this Pod (Deprecated use mem_usage ).Type: int Unit: digital,B |
memory_used_percent | The percentage usage of the memory (refer from mem_used_percent Type: float Unit: percent,percent |
network_bytes_rcvd | Cumulative count of bytes received. Type: int Unit: digital,B |
network_bytes_sent | Cumulative count of bytes transmitted. Type: int Unit: digital,B |
ready | Describes whether the pod is ready to serve requests. Type: int Unit: count |
restarts | The number of times the container has been restarted. Type: int Unit: count |
kube_replicaset
¶
The metric of the Kubernetes ReplicaSet.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
namespace | Namespace defines the space within each name must be unique. |
replicaset | Name must be unique within a namespace. |
uid | The UID of ReplicaSet. |
- Metrics
Metric | Description |
---|---|
fully_labeled_replicas | The number of fully labeled replicas per ReplicaSet. Type: int Unit: count |
replicas | The most recently observed number of replicas. Type: int Unit: count |
replicas_available | The number of available replicas (ready for at least minReadySeconds) for this replica set. Type: int Unit: count |
replicas_desired | The number of desired replicas. Type: int Unit: count |
replicas_ready | The number of ready replicas for this replica set. Type: int Unit: count |
kube_service
¶
The metric of the Kubernetes Service.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
namespace | Namespace defines the space within each name must be unique. |
service | Name must be unique within a namespace. |
uid | The UID of Service |
- Metrics
Metric | Description |
---|---|
ports | Total number of ports that are exposed by this service. Type: int Unit: count |
kube_statefulset
¶
The metric of the Kubernetes StatefulSet.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
namespace | Namespace defines the space within each name must be unique. |
statefulset | Name must be unique within a namespace. |
uid | The UID of StatefulSet. |
- Metrics
Metric | Description |
---|---|
replicas | The number of Pods created by the StatefulSet controller. Type: int Unit: count |
replicas_available | Total number of available pods (ready for at least minReadySeconds) targeted by this StatefulSet. Type: int Unit: count |
replicas_current | The number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision. Type: int Unit: count |
replicas_desired | The desired number of replicas of the given Template. Type: int Unit: count |
replicas_ready | The number of pods created for this StatefulSet with a Ready Condition. Type: int Unit: count |
replicas_updated | The number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision. Type: int Unit: count |
Object¶
docker_containers
¶
The object of containers, only supported Running status.
- Tags
Tag | Description |
---|---|
aws_ecs_cluster_name | Cluster name of the AWS ECS. |
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
container_id | Container ID. |
container_name | Container name from k8s (label io.kubernetes.container.name ). If empty then use $container_runtime_name. |
container_runtime | Container runtime (this container from Docker/Containerd/cri-o). |
container_runtime_name | Container name from runtime (like 'docker ps'). If empty then use 'unknown'. |
container_runtime_version | Container runtime version. |
container_type | The type of the container (this container is created by Kubernetes/Docker/Containerd/cri-o). |
daemonset | The name of the DaemonSet which the object belongs to. |
deployment | The name of the Deployment which the object belongs to. |
image | The full name of the container image, example nginx.org/nginx:1.21.0 . |
image_name | The name of the container image, example nginx.org/nginx . |
image_short_name | The short name of the container image, example nginx . |
image_tag | The tag of the container image, example 1.21.0 . |
name | The ID of the container. |
namespace | The namespace of the container (label io.kubernetes.pod.namespace ). |
pod_name | The pod name of the container (label io.kubernetes.pod.name ). |
pod_uid | The pod uid of the container (label io.kubernetes.pod.uid ). |
state | The state of the Container (only Running). |
statefulset | The name of the StatefulSet which the object belongs to. |
status | The status of the container,example Up 5 hours . |
task_arn | The task arn of the AWS Fargate. |
task_family | The task family of the AWS fargate. |
task_version | The task version of the AWS fargate. |
- Fields
Metric | Description |
---|---|
age | Age (seconds). Type: int Unit: time,s |
block_read_byte | Total number of bytes read from the container file system (only supported docker). Type: int Unit: digital,B |
block_write_byte | Total number of bytes wrote to the container file system (only supported docker). Type: int Unit: digital,B |
cpu_limit_millicores | The CPU limit of the container, measured in milli-cores. Type: int Unit: milli-cores |
cpu_numbers | The number of CPU cores on the system host. Type: int Unit: count |
cpu_request_millicores | The CPU request of the container, measured in milli-cores (only supported in Kubernetes). Type: int Unit: milli-cores |
cpu_usage | The actual CPU usage on the system host (percentage). Type: float Unit: percent,percent |
cpu_usage_base100 | The normalized CPU usage, with a maximum value of 100%. It is calculated as the number of CPU cores multiplied by 100. Type: float Unit: percent,percent |
cpu_usage_base_limit | The CPU usage based on the CPU limit (percentage). Type: float Unit: percent,percent |
cpu_usage_base_request | The CPU usage based on the CPU request (percentage) (only supported in Kubernetes). Type: float Unit: percent,percent |
cpu_usage_millicores | The CPU usage of the container, measured in milli-cores. Type: int Unit: milli-cores |
mem_capacity | The total memory on the system host. Type: int Unit: digital,B |
mem_limit | The memory limit of the container. Type: int Unit: digital,B |
mem_request | The memory request of the container (only supported in Kubernetes). Type: int Unit: digital,B |
mem_usage | The actual memory usage of the container. Type: int Unit: digital,B |
mem_used_percent | The memory usage percentage based on the total memory of the system host. Type: float Unit: percent,percent |
mem_used_percent_base_limit | The memory usage percentage based on the memory limit. Type: float Unit: percent,percent |
mem_used_percent_base_request | The memory usage percentage based on the memory request (only supported in Kubernetes). Type: float Unit: percent,percent |
message | Object details. Type: string Unit: - |
network_bytes_rcvd | Total number of bytes received from the network (only count the usage of the main process in the container, excluding loopback). Type: int Unit: digital,B |
network_bytes_sent | Total number of bytes send to the network (only count the usage of the main process in the container, excluding loopback). Type: int Unit: digital,B |
kubernetes_cron_jobs
¶
The object of the Kubernetes CronJob.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
cron_job_name | Name must be unique within a namespace. |
name | The UID of CronJob. |
namespace | Namespace defines the space within each name must be unique. |
uid | The UID of CronJob. |
- Fields
Metric | Description |
---|---|
active_jobs | The number of pointers to currently running jobs. Type: int Unit: count |
age | Age (seconds) Type: int Unit: time,s |
message | Object details Type: string Unit: - |
schedule | The schedule in Cron format, see doc Type: string Unit: - |
suspend | This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Type: bool Unit: - |
kubernetes_daemonset
¶
The object of the Kubernetes DaemonSet.
- Tags
Tag | Description |
---|---|
Represents the selector.matchLabels for Kubernetes resources | |
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
daemonset_name | Name must be unique within a namespace. |
name | The UID of DaemonSet. |
namespace | Namespace defines the space within each name must be unique. |
uid | The UID of DaemonSet. |
- Fields
Metric | Description |
---|---|
age | Age (seconds) Type: int Unit: time,s |
daemons_available | The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and available (ready for at least spec.minReadySeconds). Type: int Unit: count |
daemons_unavailable | The number of nodes that should be running the daemon pod and have none of the daemon pod running and available (ready for at least spec.minReadySeconds). Type: int Unit: count |
desired | The total number of nodes that should be running the daemon pod (including nodes correctly running the daemon pod). Type: int Unit: count |
message | Object details Type: string Unit: - |
misscheduled | The number of nodes that are running the daemon pod, but are not supposed to run the daemon pod. Type: int Unit: count |
ready | The number of nodes that should be running the daemon pod and have one or more of the daemon pod running and ready. Type: int Unit: count |
scheduled | The number of nodes that are running at least one daemon pod and are supposed to run the daemon pod. Type: int Unit: count |
updated | The total number of nodes that are running updated daemon pod. Type: int Unit: count |
kubernetes_deployments
¶
The object of the Kubernetes Deployment.
- Tags
Tag | Description |
---|---|
Represents the selector.matchLabels for Kubernetes resources | |
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
deployment_name | Name must be unique within a namespace. |
name | The UID of Deployment. |
namespace | Namespace defines the space within each name must be unique. |
uid | The UID of Deployment. |
- Fields
Metric | Description |
---|---|
age | Age (seconds) Type: int Unit: time,s |
available | Total number of available pods (ready for at least minReadySeconds) targeted by this deployment. (Deprecated) Type: int Unit: count |
max_surge | The maximum number of pods that can be scheduled above the desired number of pods. (Deprecated) Type: int Unit: count |
max_unavailable | The maximum number of pods that can be unavailable during the update. (Deprecated) Type: int Unit: count |
message | Object details Type: string Unit: - |
paused | Indicates that the deployment is paused (true or false). Type: bool Unit: - |
ready | The number of pods targeted by this Deployment with a Ready Condition. (Deprecated) Type: int Unit: count |
replicas | Total number of non-terminated pods targeted by this deployment (their labels match the selector). Type: int Unit: count |
replicas_available | Total number of available pods (ready for at least minReadySeconds) targeted by this deployment. Type: int Unit: count |
replicas_desired | Number of desired pods for a Deployment. Type: int Unit: count |
replicas_ready | The number of pods targeted by this Deployment with a Ready Condition. Type: int Unit: count |
replicas_unavailable | Total number of unavailable pods targeted by this deployment. Type: int Unit: count |
replicas_updated | Total number of non-terminated pods targeted by this deployment that have the desired template spec. Type: int Unit: count |
rollingupdate_max_surge | The maximum number of pods that can be scheduled above the desired number of pods. Type: int Unit: count |
rollingupdate_max_unavailable | The maximum number of pods that can be unavailable during the update. Type: int Unit: count |
strategy | Type of deployment. Can be "Recreate" or "RollingUpdate". Default is RollingUpdate. Type: string Unit: - |
unavailable | Total number of unavailable pods targeted by this deployment. (Deprecated) Type: int Unit: count |
up_dated | Total number of non-terminated pods targeted by this deployment that have the desired template spec. (Deprecated) Type: int Unit: count |
kubernetes_dfpv
¶
The object of the Kubernetes PersistentVolume.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
name | The dfpv name, consists of pvc name and pod name |
namespace | The namespace of Pod and PVC. |
node_name | Reference to the Node. |
pod_name | Reference to the Pod. |
pvc_name | Reference to the PVC. |
volume_mount_name | The name given to the Volume. |
- Fields
Metric | Description |
---|---|
available | AvailableBytes represents the storage space available (bytes) for the filesystem. Type: int Unit: digital,B |
capacity | CapacityBytes represents the total capacity (bytes) of the filesystems underlying storage. Type: int Unit: digital,B |
inodes | Inodes represents the total inodes in the filesystem. Type: int Unit: count |
inodes_free | InodesFree represents the free inodes in the filesystem. Type: int Unit: count |
inodes_used | InodesUsed represents the inodes used by the filesystem. Type: int Unit: count |
message | Object details Type: string Unit: - |
used | UsedBytes represents the bytes used for a specific task on the filesystem. Type: int Unit: digital,B |
kubernetes_jobs
¶
The object of the Kubernetes Job.
- Tags
Tag | Description |
---|---|
Represents the selector.matchLabels for Kubernetes resources | |
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
job_name | Name must be unique within a namespace. |
name | The UID of Job. |
namespace | Namespace defines the space within each name must be unique. |
uid | The UID of Job. |
- Fields
Metric | Description |
---|---|
active | The number of actively running pods. Type: int Unit: count |
active_deadline | Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it Type: int Unit: time,s |
age | Age (seconds) Type: int Unit: time,s |
backoff_limit | Specifies the number of retries before marking this job failed. Type: int Unit: count |
completions | Specifies the desired number of successfully finished pods the job should be run with. Type: int Unit: count |
failed | The number of pods which reached phase Failed. Type: int Unit: count |
message | Object details Type: string Unit: - |
parallelism | Specifies the maximum desired number of pods the job should run at any given time. Type: int Unit: count |
succeeded | The number of pods which reached phase Succeeded. Type: int Unit: count |
kubernetes_nodes
¶
The object of the Kubernetes Node.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
internal_ip | Node internal IP |
name | The UID of Node. |
node_name | Name must be unique within a namespace. |
role | Node role. (master/node) |
status | NodePhase is the recently observed lifecycle phase of the node. (Pending/Running/Terminated) |
uid | The UID of Node. |
- Fields
Metric | Description |
---|---|
age | Age (seconds). Type: int Unit: time,s |
kubelet_version | Kubelet Version reported by the node. Type: string Unit: - |
message | Object details. Type: string Unit: - |
node_ready | NodeReady means kubelet is healthy and ready to accept pods (true/false/unknown). Type: string Unit: - |
taints | Node's taints. Type: string Unit: - |
unschedulable | Unschedulable controls node schedulability of new pods (yes/no). Type: string Unit: - |
kubernetes_persistentvolumes
¶
The object of the Kubernetes PersistentVolume.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
name | The UID of PersistentVolume. |
persistentvolume_name | The name of PersistentVolume |
uid | The UID of PersistentVolume. |
- Fields
Metric | Description |
---|---|
access_modes | AccessModes contains the desired access modes the volume should have. Type: string Unit: - |
age | Age (seconds) Type: int Unit: time,s |
capacity_storage | Specifies the maximum storage capacity of a PersistentVolume (PV), which Kubernetes uses for scheduling and resource allocation. Type: string Unit: - |
claimRef_name | Name of the bound PersistentVolumeClaim. Type: string Unit: - |
claimRef_namespace | Namespace of the PersistentVolumeClaim. Type: string Unit: - |
message | Object details Type: string Unit: - |
phase | The phase indicates if a volume is available, bound to a claim, or released by a claim.(Pending/Available/Bound/Released/Failed) Type: string Unit: - |
kubernetes_persistentvolumeclaims
¶
The object of the Kubernetes PersistentVolumeClaim.
- Tags
Tag | Description |
---|---|
Represents the selector.matchLabels for Kubernetes resources | |
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
name | The UID of PersistentVolume. |
namespace | Namespace defines the space within each name must be unique. |
persistentvolumeclaim_name | Name must be unique within a namespace. |
uid | The UID of PersistentVolume. |
- Fields
Metric | Description |
---|---|
access_modes | AccessModes contains the desired access modes the volume should have. Type: string Unit: - |
age | Age (seconds) Type: int Unit: time,s |
message | Object details Type: string Unit: - |
phase | The phase indicates if a volume is available, bound to a claim, or released by a claim.(Pending/Bound/Lost) Type: string Unit: - |
requests_storage | Specifies the maximum storage capacity of a PersistentVolume (PV), which Kubernetes uses for scheduling and resource allocation. Type: string Unit: - |
storage_class_name | StorageClassName is the name of the StorageClass required by the claim. Type: string Unit: - |
volume_mode | VolumeMode defines what type of volume is required by the claim.(Block/Filesystem) Type: string Unit: - |
volume_name | VolumeName is the binding reference to the PersistentVolume backing this claim. Type: string Unit: - |
kubelet_pod
¶
The object of the Kubernetes Pod.
- Tags
Tag | Description |
---|---|
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
daemonset | The name of the DaemonSet which the object belongs to. |
deployment | The name of the Deployment which the object belongs to. |
host | Pointing to the node where the pod is located. |
name | The UID of Pod. |
namespace | Namespace defines the space within each name must be unique. |
node_name | NodeName is a request to schedule this pod onto a specific node. |
phase | The phase of a Pod is a simple, high-level summary of where the Pod is in its lifecycle.(Pending/Running/Succeeded/Failed/Unknown) |
pod_name | Name must be unique within a namespace. |
qos_class | The Quality of Service (QOS) classification assigned to the pod based on resource requirements |
statefulset | The name of the StatefulSet which the object belongs to. |
status | Reason the container is not yet running. |
uid | The UID of Pod. |
- Fields
Metric | Description |
---|---|
age | Age (seconds) Type: int Unit: time,s |
available | Number of containers Type: int Unit: count |
cpu_limit_millicores | The total CPU limit (in millicores) across all containers in this Pod. Note: This value is the sum of all container limit values, as Pods do not have a direct limit value. Type: int Unit: milli-cores |
cpu_number | The total number of CPUs on the node where the Pod is running. Type: int Unit: count |
cpu_request_millicores | The total CPU request (in millicores) across all containers in this Pod. Note: This value is the sum of all container request values, as Pods do not have a direct request value. Type: int Unit: milli-cores |
cpu_usage | The total CPU usage across all containers in this Pod. Type: float Unit: percent,percent |
cpu_usage_base100 | The normalized CPU usage, with a maximum of 100%. Type: float Unit: percent,percent |
cpu_usage_base_limit | The normalized CPU usage, with a maximum of 100%, based on the CPU limit. Type: float Unit: percent,percent |
cpu_usage_base_request | The normalized CPU usage, with a maximum of 100%, based on the CPU request. Type: float Unit: percent,percent |
cpu_usage_millicores | The total CPU usage (in millicores) averaged over the sample window for all containers. Type: int Unit: milli-cores |
ephemeral_storage_available_bytes | The storage space available (bytes) for the filesystem. Type: int Unit: digital,B |
ephemeral_storage_capacity_bytes | The total capacity (bytes) of the filesystems underlying storage. Type: int Unit: digital,B |
ephemeral_storage_used_bytes | The bytes used for a specific task on the filesystem. Type: int Unit: digital,B |
mem_capacity | The total memory capacity of the host machine. Type: int Unit: digital,B |
mem_limit | The total memory limit across all containers in this Pod. Note: This value is the sum of all container limit values, as Pods do not have a direct limit value. Type: int Unit: digital,B |
mem_request | The total memory request across all containers in this Pod. Note: This value is the sum of all container request values, as Pods do not have a direct request value. Type: int Unit: digital,B |
mem_rss | The total RSS memory usage of all containers in this Pod, which is not supported by metrics-server. Type: int Unit: digital,B |
mem_usage | The total memory usage of all containers in this Pod. Type: int Unit: digital,B |
mem_used_percent | The percentage of memory usage based on the host machine’s total memory capacity. Type: float Unit: percent,percent |
mem_used_percent_base_100 | The percentage usage of the memory (refer from mem_used_percent Type: float Unit: percent,percent |
mem_used_percent_base_limit | The percentage of memory usage based on the memory limit. Type: float Unit: percent,percent |
mem_used_percent_base_request | The percentage of memory usage based on the memory request. Type: float Unit: percent,percent |
memory_capacity | The total memory in the host machine (Deprecated use mem_capacity ).Type: int Unit: digital,B |
memory_usage_bytes | The sum of the memory usage of all containers in this Pod (Deprecated use mem_usage ).Type: int Unit: digital,B |
memory_used_percent | The percentage usage of the memory (refer from mem_used_percent Type: float Unit: percent,percent |
message | Object details Type: string Unit: - |
network_bytes_rcvd | Cumulative count of bytes received. Type: int Unit: digital,B |
network_bytes_sent | Cumulative count of bytes transmitted. Type: int Unit: digital,B |
ready | Describes whether the pod is ready to serve requests. Type: int Unit: count |
restarts | The number of times the container has been restarted. Type: int Unit: count |
kubernetes_replica_sets
¶
The object of the Kubernetes ReplicaSet.
- Tags
Tag | Description |
---|---|
Represents the selector.matchLabels for Kubernetes resources | |
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
deployment | The name of the Deployment which the object belongs to. |
name | The UID of ReplicaSet. |
namespace | Namespace defines the space within each name must be unique. |
replicaset_name | Name must be unique within a namespace. |
statefulset | The name of the StatefulSet which the object belongs to. |
uid | The UID of ReplicaSet. |
- Fields
Metric | Description |
---|---|
age | Age (seconds) Type: int Unit: time,s |
available | The number of available replicas (ready for at least minReadySeconds) for this replica set. (Deprecated) Type: int Unit: - |
message | Object details Type: string Unit: - |
ready | The number of ready replicas for this replica set. (Deprecated) Type: int Unit: - |
replicas | The most recently observed number of replicas. Type: int Unit: count |
replicas_available | The number of available replicas (ready for at least minReadySeconds) for this replica set. Type: int Unit: count |
replicas_desired | The number of desired replicas. Type: int Unit: count |
replicas_ready | The number of ready replicas for this replica set. Type: int Unit: count |
kubernetes_services
¶
The object of the Kubernetes Service.
- Tags
Tag | Description |
---|---|
Represents the selector for Kubernetes resources | |
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
name | The UID of Service |
namespace | Namespace defines the space within each name must be unique. |
service_name | Name must be unique within a namespace. |
type | Type determines how the Service is exposed. Defaults to ClusterIP. (ClusterIP/NodePort/LoadBalancer/ExternalName) |
uid | The UID of Service |
- Fields
Metric | Description |
---|---|
age | Age (seconds) Type: int Unit: time,s |
cluster_ip | ClusterIP is the IP address of the service and is usually assigned randomly by the master. Type: string Unit: - |
external_ips | ExternalIPs is a list of IP addresses for which nodes in the cluster will also accept traffic for this service. Type: string Unit: - |
external_name | ExternalName is the external reference that kubedns or equivalent will return as a CNAME record for this service. Type: string Unit: - |
external_traffic_policy | ExternalTrafficPolicy denotes if this Service desires to route external traffic to node-local or cluster-wide endpoints. Type: string Unit: - |
message | Object details Type: string Unit: - |
session_affinity | Supports "ClientIP" and "None". Type: string Unit: - |
kubernetes_statefulsets
¶
The object of the Kubernetes StatefulSet.
- Tags
Tag | Description |
---|---|
Represents the selector.matchLabels for Kubernetes resources | |
cluster_name_k8s | K8s cluster name(default is default ). We can rename it in datakit.yaml on ENV_CLUSTER_NAME_K8S. |
name | The UID of StatefulSet. |
namespace | Namespace defines the space within each name must be unique. |
statefulset_name | Name must be unique within a namespace. |
uid | The UID of StatefulSet. |
- Fields
Metric | Description |
---|---|
age | Age (seconds) Type: int Unit: time,s |
message | Object details Type: string Unit: - |
replicas | The number of Pods created by the StatefulSet controller. Type: int Unit: count |
replicas_available | Total number of available pods (ready for at least minReadySeconds) targeted by this StatefulSet. Type: int Unit: count |
replicas_current | The number of Pods created by the StatefulSet controller from the StatefulSet version indicated by currentRevision. Type: int Unit: count |
replicas_desired | The desired number of replicas of the given Template. Type: int Unit: count |
replicas_ready | The number of pods created for this StatefulSet with a Ready Condition. Type: int Unit: count |
replicas_updated | The number of Pods created by the StatefulSet controller from the StatefulSet version indicated by updateRevision. Type: int Unit: count |
Logs¶
<CONTAINER-NAME>
¶
The logging of the container.
- Tags
Tag | Description |
---|---|
container_id | Container ID. |
container_name | Container name from k8s (label io.kubernetes.container.name ). If empty then use $container_runtime_name. |
daemonset | The name of the DaemonSet which the object belongs to. |
deployment | The name of the Deployment which the object belongs to. |
filepath | The filepath to the log file on the host system where the log is stored. |
host | Host name |
image | The full name of the container image, example nginx.org/nginx:1.21.0 . |
inside_filepath | The path to the log file inside the container (only applicable for log collection from within containers). |
namespace | The namespace of the container (label io.kubernetes.pod.namespace ). |
pod_ip | The pod ip of the container. |
pod_name | The pod name of the container (label io.kubernetes.pod.name ). |
service | The name of the service, if service is empty then use source . |
statefulset | The name of the StatefulSet which the object belongs to. |
- Fields
Metric | Description |
---|---|
log_file_inode | The inode of the log file, which uniquely identifies it on the file system (requires enabling the global configuration enable_debug_fields ).Type: int Unit: count |
log_read_lines | The lines of the read file. Type: int Unit: count |
log_read_offset | The current offset in the log file where reading has occurred, used to track progress during log collection (requires enabling the global configuration enable_debug_fields ).Type: int Unit: count |
message | The text of the logging. Type: string Unit: - |
status | The status of the logging, dafault is info .Type: string Unit: - |
kubernetes_events
¶
The logging of the Kubernetes Event.
- Tags
Tag | Description |
---|---|
reason | This should be a short, machine understandable string that gives the reason, for the transition into the object's current status. |
type | Type of this event. |
uid | The UID of event. |
- Fields
Metric | Description |
---|---|
involved_kind | Kind of the referent for involved object. Type: string Unit: - |
involved_name | Name must be unique within a namespace for involved object. Type: string Unit: - |
involved_namespace | Namespace defines the space within which each name must be unique for involved object. Type: string Unit: - |
involved_uid | The UID of involved object. Type: string Unit: - |
message | Details of event log Type: string Unit: - |
source_component | Component from which the event is generated. Type: string Unit: - |
source_host | Node name on which the event is generated. Type: string Unit: - |
Change Events¶
event
¶
The change in the Specification of Kubernetes resources, where only the Specification is compared, excluding Meta and Status.
- Tags
Tag | Description |
---|---|
df_event_id | The event ID is generated by UUIDv4, e.g. event-<lowercase UUIDv4> . |
df_namespace | The namespace of Kubernetes resource. |
df_resource | The name of Kubernetes resource, e.g. deployment-abc-123 |
df_resource_type | The type of Kubernetes resource, e.g. Deployment/DamonSet |
df_source | The event source is always change . |
df_status | The event source is always info . |
df_sub_status | Always info . |
df_title | This is a template field, concatenated from other values: [{{df_resource_type}}] {{df_resource}} configuration changed . |
df_uid | The UID of Kubernetes resource. |
- Fields
Metric | Description |
---|---|
df_check_range_end | Current system time Type: int Unit: timeStamp,sec |
df_check_range_start | Current system time Type: int Unit: timeStamp,sec |
df_date_range | Always 0 .Type: int Unit: - |
df_message | Diff text of resource changes. Type: string Unit: - |
Link Dataway Sink Function¶
Dataway Sink see documentation.
All collected Kubernetes resources will have a Label that matches the CustomerKey. For example, if the CustomerKey is name
, DaemonSets, Deployments, Pods, and other resources will search for name
in their own current Labels and add it to tags.
Containers will add Customer Labels of the Pods they belong to.
FAQ¶
Filtering Metrics Collection by Pod Namespace¶
When Kubernetes Pod metrics collection is enabled (enable_pod_metric = true
), DataKit will collect metrics data for all Pods in the cluster. Since this can result in a large volume of data, you can filter the metrics collection by the Pod's namespace
field to only collect metrics from Pods in specific namespaces.
You can control which Pods are included or excluded from metrics collection by configuring pod_include_metric
and pod_exclude_metric
.
## Collect metrics for Pods whose namespace matches `datakit`
pod_include_metric = ["namespace:datakit"]
## Exclude all Pods with namespace `kodo`
pod_exclude_metric = ["namespace:kodo"]
- Both
include
andexclude
settings must start with a field name, formatted as a glob pattern:"<field name>:<glob rule>"
. - Currently, only the
namespace
field is supported for filtering, e.g.,namespace:datakit-ns
.
If both include
and exclude
are configured, the Pod must meet the following conditions:
- It must satisfy the
include
rule - It must not satisfy the
exclude
rule
For example, the following configuration will filter out all Pods:
In a Kubernetes environment, you can configure the following environment variables:
ENV_INPUT_CONTAINER_POD_INCLUDE_METRIC
ENV_INPUT_CONTAINER_POD_EXCLUDE_METRIC
For example, if you want to collect metrics only for Pods in the kube-system
namespace, you can set the ENV_INPUT_CONTAINER_POD_INCLUDE_METRIC
environment variable as shown below:
- env:
- name: ENV_INPUT_CONTAINER_POD_INCLUDE_METRIC
value: namespace:kube-system # Specify the namespace to collect metrics from
By using this method, you can flexibly control the range of Pods from which DataKit collects metrics, reducing the collection of unnecessary data and optimizing system performance and resource usage.
NODE_LOCAL Mode Requires New RBAC Permissions¶
The ENV_INPUT_CONTAINER_ENABLE_K8S_NODE_LOCAL
mode is only recommended for DaemonSet deployment and requires access to kubelet, so the nodes/stats
permission needs to be added to RBAC. For example:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: datakit
rules:
- apiGroups: [""]
resources: ["nodes", "nodes/stats"]
verbs: ["get", "list", "watch"]
In addition, the DataKit Pod needs to have the hostNetwork: true
configuration item enabled.
Collect PersistentVolumes and PersistentVolumeClaims Requires New Permissions¶
DataKit version 1.25.0 Version-1.25.0 supported the collection of object data for Kubernetes PersistentVolume and PersistentVolumeClaim, which require new RBAC permissions, as described below:
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: datakit
rules:
- apiGroups: [""]
resources: ["persistentvolumes", "persistentvolumeclaims"]
verbs: ["get", "list", "watch"]
Kubernetes YAML Sensitive Field Mask¶
DataKit collects yaml configurations for resources such as Kubernetes Pod or Service and stores them in the yaml
field of the object data. If the yaml contains sensitive data (such as passwords), DataKit does not support manually configuring and shielding sensitive fields for the time being. It is recommended to use Kubernetes' official practice, that is, to use ConfigMap or Secret to hide sensitive fields.
For example, you now need to add a password to the env, which would normally be like this:
When orchestrating yaml configuration, passwords will be stored in clear text, which is very unsafe. You can use Kubernetes Secret to implement hiding as follows:
Create a Secret:
apiVersion: v1
kind: Secret
metadata:
name: mysecret
type: Opaque
data:
username: username123
password: password123
Execute:
Using Secret in env:
containers:
- name: mycontainer
image: redis
env:
- name: SECRET_PASSWORD
valueFrom:
secretKeyRef:
name: mysecret
key: password
optional: false
See doc.