FileBeat+elasticsearch+Kibana - K8S 采集 pod 和 Events 日志 K8S



# helm

https://abc.htmltoo.com/thread-46798.htm


-部署包下载地址:

https://artifacthub.io/packages/helm/elastic/filebeat


-下载安装包

helm repo add elastic https://helm.elastic.co

helm pull elastic/filebeat --version 7.17.3

tar -xf filebeat-7.17.3.tgz


---

-修改配置

# 修改配置 filebeat/values.yaml,主要把 ELasticsearch 地址更换
vi filebeat/values.yaml
# 主要修改filebeat配置
  filebeatConfig:
    filebeat.yml: |
      filebeat.inputs:
      - type: container
        paths:
          - /var/log/containers/*.log
        fields:
          index: k8s-pod-log
        processors:
        - add_kubernetes_metadata:
            in_cluster: true
            host: ${NODE_NAME}
            matchers:
            - logs_path:
                logs_path: "/var/log/containers/"
      output.elasticsearch:
        host: '${NODE_NAME}'
        hosts: '192.168.182.110:9200'
        index: "filebeat-%{[fields][index]}-%{+yyyy.MM.dd}"
      setup.template.name: "default@template"
      setup.template.pattern: "filebeat-k8s-*"
      setup.ilm.enabled: false

使用Filebeat的输入模块配置,选择 type: container。这告诉Filebeat应该监控容器的标准输出和日志文件。


-采集 Events 日志

Kubernetes Events 日志记录了集群中发生的事件,如 Pod 的创建、删除、调度等。Filebeat 可以监控这些事件日志并将其发送到相同或不同的目标位置。以下是如何配置 Filebeat 来采集 Kubernetes Events 日志

配置输入模块:

使用Filebeat的输入模块配置,选择type: kubernetes。这告诉Filebeat应该监控Kubernetes Events。

filebeat.inputs:
- type: kubernetes
  include_events: [".*"]


git clone https://gitee.com/hadoop-bigdata/elasticsearch-kibana-on-k8s.git

cd elasticsearch-kibana-on-k8s

### 1、开始部署elasticsearch

# 如果没有挂载目录,则需要提前创建,也可自己更换挂载目录

# 先创建本地存储目录

mkdir -p /opt/bigdata/servers/elasticsearch/data/data1

chmod -R 777 /opt/bigdata/servers/elasticsearch/data/data1

helm install my-elasticsearch ./elasticsearch -n elasticsearch --create-namespace

# 查看

helm get notes my-elasticsearch -n elasticsearch

kubectl get pods,svc -n elasticsearch -owide

# 查看日志

kubectl logs -f elasticsearch-master-0 -n elasticsearch

# 测试验证

curl http://192.168.182.110:30920/

curl http://192.168.182.110:30920/_cat/nodes

curl http://192.168.182.110:30920/_cat/health?pretty

### 2、开始部署kibana

# 先创建本地存储目录

mkdir -p /opt/bigdata/servers/kibana/data/data1

chmod -R 777 /opt/bigdata/servers/kibana/data/data1

helm install my-kibana ./kibana -n kibana --create-namespace

# 查看

helm get notes my-kibana -n kibana 

kubectl get pods,svc -n kibana -owide


其实采集原理是非常简单的,只能采集 pod 标准输出的日志

就是通过挂载宿主机的容器日志目录 /var/lib/docker/containers 到容器的 /var/lib/docker/containers


---采集 Events 日志配置

Kubernetes (k8s) 事件(Events)日志通常存储在 Kubernetes 集群的 etcd 存储中,默认情况下,事件数据在 Kubernetes 集群 ETCD 中保存 1 小时

修改 kube-apiserver 的配置文件(/etc/kubernetes/manifests/kube-apiserver.yaml)

可以调整 events 日志保留时长,并为 --event-ttl参数设置新的值

因为 events 日志不存在文件存储,所以这里使用 k8s api 接口采集方式,

当然也可以通过 kubectl get events -A -w 采集


-创建 filebeat 授权 token

filebeat-serviceaccount.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: filebeat-service-account
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: filebeat-role
rules:
- apiGroups:
  - ""
  resources:
  - events
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: filebeat-role-binding
subjects:
- kind: ServiceAccount
  name: filebeat-service-account
  namespace: default
roleRef:
  kind: ClusterRole
  name: filebeat-role
  apiGroup: rbac.authorization.k8s.io

-创建用户和角色

kubectl apply -f filebeat-service-account.yaml

-获取 ServiceAccount 令牌:

kubectl get secret $(kubectl get serviceaccount filebeat-service-account -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 -d

-filebeat.yaml

filebeat.inputs:
- type: httpjson
  enabled: true
  name: k8s-events
  url: "https://192.168.182.110:6443/api/v1/events?watch=true"
  http_method: "GET"
  ssl.certificate_authorities: ["/etc/kubernetes/pki/ca.crt"]
  #ssl.verification_mode: none
  json.keys_under_root: true
  interval: 10s
  fields:
    type: k8s-events
    index: k8s-event-log
  #paths:
  #  - "/"
  #headers:
  #  Authorization: "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6Ilh0Y2k0a1NOdXIyZnRNTUE2STZ5TEtqcnBRMkpOcDh4UHFOZzlMeW9UQXcifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6ImZpbGViZWF0LXNlcnZpY2UtYWNjb3VudC10b2tlbi1wNGtqNyIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJmaWxlYmVhdC1zZXJ2aWNlLWFjY291bnQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiJhNTEyNzQ3Ny0zYjIwLTQzMjAtODY0MS1hNmJmOTFlYTBhMzIiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpmaWxlYmVhdC1zZXJ2aWNlLWFjY291bnQifQ.j3qmbs3n45xpWUHMyviHsmsGLQOhH6gz6FtkPKLDr-1D4m4paOivoS1Coy7pdlC5J40YNQeEwrHA9L7Hy1UQ-02Y98rrHn0O_oOxE4qR06-bmua7j3lAEWHCRrmmsmk9HGkPar1HxIERn6BNwRyWeQdHc6CvnCbwqvBBnpYuZ7lcO1agbZZ3E02MUwNN1ZG2n_dWi9dnRJGuc9Capm50AZzolo8k8frK5nLs8T5GxDI4bMC7Gbq6FaL8RVI_DVJpm7zGFJrtzPwhVFnqCAdMFeQbRIzpmWseSA-GHH4WQ3JpLdkvzUZr8jhZ6jMSCE6u8UGO2AeEjBElZpzpwVk4cg"
logging.level: debug
output.elasticsearch:
  hosts: ["192.168.182.110:30920"]
  index: "filebeat-%{[fields][index]}-%{+yyyy.MM.dd}"
setup.template.name: "default@template"
setup.template.pattern: "filebeat-k8s-*"
setup.ilm.enabled: false
TOKEN=`kubectl get secret $(kubectl get serviceaccount filebeat-service-account -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 -d`
echo $TOKEN
curl -ks --header "Authorization: Bearer $TOKEN" https://192.168.182.110:6443/api/v1/events?watch=true
# 也可以通过ca证书这样访问
curl --cacert "/etc/kubernetes/pki/ca.crt" --header "Authorization: Bearer $TOKEN"  https://192.168.182.110:6443/api/v1/events?watch=true


-开始安装 filebeat

helm install filebeat ./filebeat -n logging --create-namespace

kubectl get pods -n logging


-检查数据是否正常采集到 ES

访问 kibana:http://ip:5601/


1、Stack Management  -》 2、索引模式  -》 3、开始创建索引模式 -》 4、Discover 查询数据



采集 pod 和 Events 日志,一般不会直接采集到 ES,而是会通过 kafka中间件作为缓冲,这样可以避免大数据量导致 ES 压力过大。


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回