K8S部署ELK管理集群日志

前言:ELK是目前主流的日志解決方案,尤其是容器化集群的今天,ELK幾乎是集群必備的一部分能力;ELK在K8S落地有多種組合模式:
比如:fluentd+ELK或filebeat+ELK或log-pilot+ELK
而本文采用的是功能更強(qiáng)大的后者:log-pilot 采集--->logstash過濾加工--->ES存儲與索引--->Kibana展示的方案,日志量大的集群建議再加一層kafka提升吞吐,降低logstash的負(fù)載。

1.ES集群安裝

我們計劃安裝兩個節(jié)點的集群環(huán)境:
節(jié)點1IP:192.168.0.137
節(jié)點2IP:192.168.0.230
關(guān)于安裝的版本:
從 6.8.0 和 7.1.0 版本開始, Elastic Stack安全功能免費(fèi)提供,在Elasticsearch7.3,x-pack已經(jīng)作為默認(rèn)的插件集成在Elasticsearch里面了,為了今后方便的的添加安全策略,我們建議安裝7.3之后的版本
本文我們安裝7.5.0版本,es和kibana版本使用同樣的版本號。

以下命令在兩個節(jié)點分別執(zhí)行

docker pull elasticsearch:7.5.0
mkdir /data/es/data   請逐級創(chuàng)建目錄
mkdir /data/es/config 請逐級創(chuàng)建目錄
chmod 777 /data/es
vim /etc/sysctl.conf
加入如下內(nèi)容:
vm.max_map_count=262144  
然后:wq保存
啟用配置:
sysctl -p
注:這一步是為了防止啟動容器時,報出如下錯誤:
bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]

節(jié)點1上執(zhí)行命令:

cd /data/es/config
vim es1.yml  創(chuàng)建yml文件,內(nèi)容如下
#集群名稱
cluster.name: es-cluster
#節(jié)點名稱
node.name: node-a
#是不是有資格競選主節(jié)點
node.master: true
#是否存儲數(shù)據(jù)
node.data: true
#最大集群節(jié)點數(shù)
node.max_local_storage_nodes: 10
#網(wǎng)關(guān)地址
network.host: 0.0.0.0
network.publish_host: 192.168.0.137
#端口
http.port: 9200
#內(nèi)部節(jié)點之間溝通端口
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
#es7.x 之后新增的配置,寫入候選主節(jié)點的設(shè)備地址,在開啟服務(wù)后可以被選為主節(jié)點
discovery.seed_hosts: ["192.168.0.137:9300","192.168.0.230:9300"]
#es7.x 之后新增的配置,初始化一個新的集群時需要此配置來選舉master
cluster.initial_master_nodes: ["node-a"]
#數(shù)據(jù)存儲路徑
path.data: /usr/share/elasticsearch/data
#日志存儲路徑
path.logs: /usr/share/elasticsearch/data/logs

節(jié)點2上執(zhí)行命令如下:

cd /data/es/config
vim es2.yml  創(chuàng)建yml文件,內(nèi)容如下
#集群名稱
cluster.name: es-cluster
#節(jié)點名稱
node.name: node-b
#是不是有資格競選主節(jié)點
node.master: true
#是否存儲數(shù)據(jù)
node.data: true
#最大集群節(jié)點數(shù)
node.max_local_storage_nodes: 10
#網(wǎng)關(guān)地址
network.host: 0.0.0.0
network.publish_host: 192.168.0.230
#端口
http.port: 9200
#內(nèi)部節(jié)點之間溝通端口
transport.tcp.port: 9300
http.cors.enabled: true
http.cors.allow-origin: "*"
#es7.x 之后新增的配置,寫入候選主節(jié)點的設(shè)備地址,在開啟服務(wù)后可以被選為主節(jié)點
discovery.seed_hosts: ["192.168.0.137:9300","192.168.0.230:9300"]
#es7.x 之后新增的配置,初始化一個新的集群時需要此配置來選舉master
cluster.initial_master_nodes: ["node-a"]
#數(shù)據(jù)存儲路徑
path.data: /usr/share/elasticsearch/data
#日志存儲路徑
path.logs: /usr/share/elasticsearch/data/logs

創(chuàng)建容器

節(jié)點1,節(jié)點2均執(zhí)行以下命令:
docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -d -p 9200:9200 -p 9300:9300 -v /data/es/config/es.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v /data/es/data:/usr/share/elasticsearch/data --name ES elasticsearch:7.5.0

等約2分鐘左右查看兩個節(jié)點狀態(tài)
http://192.168.0.137:9200
http://192.168.0.230:9200

使用elasticsearch-head前端框架(可選內(nèi)容)

#拉取鏡像
docker pull mobz/elasticsearch-head:5
#啟動容器
docker run -d -p 9100:9100 --name es-manager  mobz/elasticsearch-head:5

瀏覽器訪問http://192.168.0.137:9100/
并連接http://192.168.0.137:9200/

附:yml文件參數(shù)說明

以下參數(shù)介紹來源:https://blog.csdn.net/belonghuang157405/article/details/83301937
cluster.name:用于唯一標(biāo)識一個集群,不同的集群,其 cluster.name 不同,集群名字相同的所有節(jié)點自動組成一個集群。如果不配置改屬性,默認(rèn)值是:elasticsearch。
node.name:節(jié)點名,默認(rèn)隨機(jī)指定一個name列表中名字。集群中node名字不能重復(fù)
index.number_of_shards: 默認(rèn)的配置是把索引分為5個分片
index.number_of_replicas:設(shè)置每個index的默認(rèn)的冗余備份的分片數(shù),默認(rèn)是1
通過 index.number_of_shards,index.number_of_replicas默認(rèn)設(shè)置索引將分為5個分片,每個分片1個副本,共10個結(jié)點。
禁用索引的分布式特性,使索引只創(chuàng)建在本地主機(jī)上:
index.number_of_shards: 1
index.number_of_replicas: 0
但隨著版本的升級 將不在配置文件中配置而實啟動ES后,再進(jìn)行配置
bootstrap.memory_lock: true 當(dāng)JVM做分頁切換(swapping)時,ElasticSearch執(zhí)行的效率會降低,推薦把ES_MIN_MEM和ES_MAX_MEM兩個環(huán)境變量設(shè)置成同一個值,并且保證機(jī)器有足夠的物理內(nèi)存分配給ES,同時允許ElasticSearch進(jìn)程鎖住內(nèi)存
network.bind_host: 設(shè)置可以訪問的ip,可以是ipv4或ipv6的,默認(rèn)為0.0.0.0,這里全部設(shè)置通過
network.publish_host:設(shè)置其它結(jié)點和該結(jié)點交互的ip地址,如果不設(shè)置它會自動判斷,值必須是個真實的ip地址
同時設(shè)置bind_host和publish_host兩個參數(shù)可以替換成network.host
network.bind_host: 192.168.0.137
network.publish_host: 192.168.0.137
=>network.host: 192.168.0.137
http.port:設(shè)置對外服務(wù)的http端口,默認(rèn)為9200
transport.tcp.port: 設(shè)置節(jié)點之間交互的tcp端口,默認(rèn)是9300
http.cors.enabled: 是否允許跨域REST請求
http.cors.allow-origin: 允許 REST 請求來自何處
node.master: true 配置該結(jié)點有資格被選舉為主結(jié)點(候選主結(jié)點),用于處理請求和管理集群。如果結(jié)點沒有資格成為主結(jié)點,那么該結(jié)點永遠(yuǎn)不可能成為主結(jié)點;如果結(jié)點有資格成為主結(jié)點,只有在被其他候選主結(jié)點認(rèn)可和被選舉為主結(jié)點之后,才真正成為主結(jié)點。
node.data: true 配置該結(jié)點是數(shù)據(jù)結(jié)點,用于保存數(shù)據(jù),執(zhí)行數(shù)據(jù)相關(guān)的操作(CRUD,Aggregation);
discovery.zen.minimum_master_nodes: //自動發(fā)現(xiàn)master節(jié)點的最小數(shù),如果這個集群中配置進(jìn)來的master節(jié)點少于這個數(shù)目,es的日志會一直報master節(jié)點數(shù)目不足。(默認(rèn)為1)為了避免腦裂,個數(shù)請遵從該公式 => (totalnumber of master-eligible nodes / 2 + 1)。 * 腦裂是指在主備切換時,由于切換不徹底或其他原因,導(dǎo)致客戶端和Slave誤以為出現(xiàn)兩個active master,最終使得整個集群處于混亂狀態(tài)*
discovery.zen.ping.unicast.hosts: 集群個節(jié)點IP地址,也可以使用es-node等名稱,需要各節(jié)點能夠解析

安裝中文分詞
中文分詞插件:
https://github.com/medcl/elasticsearch-analysis-ik/
版本對應(yīng)關(guān)系如下圖:

說明:本文是安裝了7.5.0版本插件(并不是說ES7.5安裝插件也必須7.5,這個看上圖的對應(yīng)關(guān)系,ES7安裝當(dāng)前最新版本都沒問題的)
docker exec -it ES /bin/bash  進(jìn)入容器
./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.0/elasticsearch-analysis-ik-7.5.0.zip
等幾分鐘安裝好后,退出容器,重啟容器
docker restart es

2.安裝kibana

拉取鏡像,注意版本要和ES版本號一致
docker pull kibana:7.5.0

mkdir /data/es/kibana/config
mkdir /data/es/kibana/plugins
cd /data/es/kibana
chmod 777 kibana
cd /data/es/kibana/config
vim kibana.yml   制作配置文件
###################
server.name: kibana
server.host: "0.0.0.0" 
elasticsearch.hosts: [ "http://192.168.0.137:9200","http://192.168.0.230:9200"]
xpack.monitoring.ui.container.elasticsearch.enabled: true

啟動容器:

docker run -d --name kibana  -p 5601:5601 -v /data/es/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml  -v /data/es/kibana/plugins:/usr/share/kibana/plugins:rw  --name kibana   kibana:7.5.0

此時我們可以查看日志 docker logs kibana
當(dāng)看到以下信息時證明啟動成功:

{"type":"log","@timestamp":"2020-03-22T08:20:11Z","tags":["status","plugin:reporting@7.5.0","info"],"pid":6,"state":"green","message":"Status changed from uninitialized to green - Ready","prevState":"uninitialized","prevMsg":"uninitialized"}
{"type":"log","@timestamp":"2020-03-22T08:20:11Z","tags":["listening","info"],"pid":6,"message":"Server running at http://0.0.0.0:5601"}
{"type":"log","@timestamp":"2020-03-22T08:20:11Z","tags":["info","http","server","Kibana"],"pid":6,"message":"http server running at http://0.0.0.0:5601"}

此時我們通過http://ip:5601就可以看到kibana界面,如下圖:

為kinba映射一個好記的域名(可選)
到nginx confi.d文件夾建一kibana.conf,內(nèi)容如下:

server
{
        listen 80;
        #listen 443 ssl;
        server_name kibana.xxxx.cn;     #域名A記錄我們提前已經(jīng)指好
        location / {
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://192.168.0.137:5601;  #kibana的安裝節(jié)點及端口
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
             root   /usr/share/nginx/html;
        }
}

重啟nginx,就可以看到kibana的初始界面


kibana漢化
由于 kibana5.* 6.* 官方并沒有支持中文,需要另外下載補(bǔ)丁包 推薦下面這個 https://github.com/anbai-inc/Kibana_Hanization,手動安裝
7.*之后官方已經(jīng)支持了中文,中文包在 /usr/share/kibana/node_modules/x-pack/plugins/translations/translations/zh-CN.jso
只需要在配置文件 kibana.yml 中加入
i18n.locale: "zh-CN"
我們修改下

 vim /data/es/kibana/config/kibana.yml
 加入一行:i18n.locale: "zh-CN"  然后保存
 docker restart kibana  重啟容器

3.添加密碼驗證

docker exec -it ES /bin/bash #進(jìn)入容器
生成證書

###生成授權(quán)證書
bin/elasticsearch-certutil ca (CA證書:elastic-stack-ca.p12)
Please enter the desired output file [elastic-stack-ca.p12]: elastic-stack-ca.p12 (輸入elastic-stack-ca.p12)
Enter password for elastic-stack-ca.p12 : (輸入一個密碼,后面要用)
###根據(jù)授權(quán)證書生成節(jié)點證書
[root@6259c569027a elasticsearch]# bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 (生成節(jié)點證書)
 Enter password for CA (elastic-stack-ca.p12) :(輸入授權(quán)證書剛才的密碼)
Please enter the desired output file [elastic-certificates.p12]: elastic-certificates.p12(輸入節(jié)點證書文件名elastic-certificates.p12)
Enter password for elastic-certificates.p12 : (輸入節(jié)點證書密碼)
然后我們將剛才輸入的密碼到 elasticsearch keystore 
bin/elasticsearch-keystore add xpack.security.transport.ssl.keystore.secure_password
bin/elasticsearch-keystore add xpack.security.transport.ssl.truststore.secure_password
以上命令會在config目錄生成elasticsearch.keystore文件

證書創(chuàng)建完畢,可以看到兩個證書文件在當(dāng)前目錄


我們把elastic-certificates.p12復(fù)制到data目錄,該目錄我們映射到主機(jī),不會丟失。
cp elastic-certificates.p12 data
同時將elastic-certificates.p12文件也復(fù)制到其他節(jié)點的es/data目錄。
將elasticsearch.keystore復(fù)制到其他節(jié)點的config目錄(進(jìn)入docker容器后上傳)
修改文件的權(quán)限
[root@k8s-node1 data]# chmod 777 elastic-certificates.p12
然后我們修改各節(jié)點的es.yml文件

vim es.yml,添加這幾行:
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.license.self_generated.type: basic
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/data/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/data/elastic-certificates.p12

啟用密碼

#master節(jié)點執(zhí)行如下操作:
vim /data/es/config/es.yaml
#添加如下三行(前面已有添加過)
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.license.self_generated.type: basic
#保存后,重啟Docker
docker restart ES

這時候再次打開http://ip:9200,則會彈出密碼輸入框,我們接下來初始化密碼:

docker exec -it ES /bin/bash  #進(jìn)入ES容器
bin/elasticsearch-setup-passwords interactive  #執(zhí)行密碼初始化,一共6個組件的密碼,每個重復(fù)一次,共輸入12遍,如下:
[root@6259c569027a elasticsearch]# bin/elasticsearch-setup-passwords interactive 
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y


Enter password for [elastic]: 
Reenter password for [elastic]: 
Enter password for [apm_system]: 
Reenter password for [apm_system]: 
Enter password for [kibana]: 
Reenter password for [kibana]: 
Enter password for [logstash_system]: 
Reenter password for [logstash_system]: 
Enter password for [beats_system]: 
Reenter password for [beats_system]: 
Enter password for [remote_monitoring_user]: 
Reenter password for [remote_monitoring_user]: 
Changed password for user [apm_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

然后分別重啟兩個節(jié)點的ES docker restart ES
設(shè)置密碼的方法參考了一系列網(wǎng)上文章:
https://blog.csdn.net/mengo1234/article/details/104920667/
x-park的license有效期可參考這篇處理:https://www.cnblogs.com/gavinYang/p/11200234.html
集群和非集群x-park使用所差異,參考:
http://www.eryajf.net/3500.html
Kibana添加ES密碼

vim kibana.yml
#添加下面兩行后,重啟kibana容器
elasticsearch.username: "kibana"
elasticsearch.password: "之前為kibana帳戶創(chuàng)建的密碼"
然后重啟kibana容器,會跳轉(zhuǎn)到登錄界面


登錄時我們用elastic帳戶登錄(起初嘗試用kibana帳戶報403)
接下來我們用kibana查看下ES集群狀態(tài)

看到這個情況時,我們需要修改下es.yml文件,添加一個配置項:

兩個節(jié)點的 es.yml均添加下面一行,然后docker restart ES重啟ES
xpack.monitoring.collection.enabled: true

重新進(jìn)入kibana就可以ES節(jié)點的詳細(xì)信息了。


4.安裝logstash

Logstash是一個日志收集器,可以理解為一個管道,或者中間件。
功能是從定義的輸入源inputs讀取信息,經(jīng)過filters過濾器處理,輸入到定義好的outputs輸出源。
輸入源可以是stdin、日志文件、數(shù)據(jù)庫等,輸出源可以是stdout、elesticsearch、HDFS等。

安裝過程如下:
下載docker鏡像
盡量保證版本號和ES一致,否則容易產(chǎn)生不兼容問題。
docker pull docker.elastic.co/logstash/logstash:7.5.0
創(chuàng)建文件夾 (用于容器文件的掛載)
mkdir /data/logstash/config
創(chuàng)建相關(guān)配置文件

vim logstash.yml 
http.host: "0.0.0.0"
http.port: 9600

logstash.yml相關(guān)參數(shù)編寫可參考:https://segmentfault.com/a/1190000016591476

vim log4j2.properties
logger.elasticsearchoutput.name = logstash.outputs.elasticsearch
logger.elasticsearchoutput.level = debug
vim pipelines.yml
- pipeline.id: my-logstash
  path.config: "/usr/share/logstash/config/*.conf"
  pipeline.workers: 3
es.conf 文件
input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 5044
  }
}
output {
  elasticsearch {
    action => "index"
    hosts  => ["192.168.0.137:9200","192.168.0.230:9200"]
    index  => "index"  #"index"是索引庫名稱,可以用變量自動生成索引庫名
    user =>"elastic"
    password =>"xxxxxx"
  }
}

啟動命令

docker run -d -p 5044:5044 -p 9600:9600 -it -v /data/logstash/config/:/usr/share/logstash/config/  --name logstash docker.elastic.co/logstash/logstash:7.5.0 

docker logs logstash 查看日志,當(dāng)看到如下信息說明運(yùn)行成功:

14:47:18.759 [Ruby-0-Thread-1: /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/stud-0.0.23/lib/stud/task.rb:22] INFO  logstash.agent - Pipelines running {:count=>1, :running_pipelines=>[:"my-logstash"], :non_running_pipelines=>[]}
14:47:18.769 [[my-logstash]<tcp] INFO  logstash.inputs.tcp - Starting tcp input listener {:address=>"0.0.0.0:4567", :ssl_enable=>"false"}
14:47:18.902 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}

打開瀏覽器訪問驗證:http://ip:9600

5.安裝log-pilot

Log-Pilot是阿里開源的一個智能容器日志采集工具,能夠高效便捷地將容器日志采集輸出到多種后臺日志存儲系統(tǒng)中,不僅能夠采集容器標(biāo)準(zhǔn)輸出日志,同時能夠動態(tài)發(fā)現(xiàn)配置采集容器內(nèi)文件日志,參考官方介紹:https://yq.aliyun.com/articles/674327

我們在k8s集群內(nèi)將采用k8s的模式進(jìn)行安裝,便于自動管理。
準(zhǔn)備yaml文件如下

vim log-pilot.yaml #創(chuàng)建文件
---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: log-pilot
  namespace: es
  labels:
    k8s-app: log-pilot
    kubernetes.io/cluster-service: "true"
spec:
  template:
    metadata:
      labels:
        k8s-app: log-es
        kubernetes.io/cluster-service: "true"
        version: v1.22
    spec:
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      containers:
      - name: log-pilot
        image: registry.cn-hangzhou.aliyuncs.com/acs/log-pilot:0.9.6-filebeat
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi
        env:
          - name: "LOGGING_OUTPUT"
            value: "logstash"
          - name: "LOGSTASH_HOST"
            value: "192.168.0.230"
          - name: "LOGSTASH_PORT"
            value: "5044"
          - name: "LOGSTASH_LOADBALANCE"
            value: "true"
          #- name: "FILEBEAT_OUTPUT"
          #  value: "elasticsearch"
          #- name: "ELASTICSEARCH_HOST"
          #  value: "192.168.0.137"
          #- name: "ELASTICSEARCH_PORT"
          #  value: "9200"
          #- name: "ELASTICSEARCH_USER"
          #  value: "elastic"
          #- name: "ELASTICSEARCH_PASSWORD"
          #  value: "1111111"
        volumeMounts:
        - name: sock
          mountPath: /var/run/docker.sock
        - name: root
          mountPath: /host
          readOnly: true
        - name: varlib
          mountPath: /var/lib/filebeat
        - name: varlog
          mountPath: /var/log/filebeat
        securityContext:
          capabilities:
            add:
            - SYS_ADMIN
      terminationGracePeriodSeconds: 30
      volumes:
      - name: sock
        hostPath:
          path: /var/run/docker.sock
      - name: root
        hostPath:
          path: /
      - name: varlib
        hostPath:
          path: /var/lib/filebeat
          type: DirectoryOrCreate
      - name: varlog
        hostPath:
          path: /var/log/filebeat
          type: DirectoryOrCreate

在master節(jié)點執(zhí)行kubectl apply -f log-pilot.yaml
其中
LOGGING_OUTPUT 是使用logstash接收log-pilot接收到的日志
LOGSTASH_HOST logstash服務(wù)的ip地址
LOGSTASH_PORT logstash服務(wù)的端口
LOGSTASH_LOADBALANCE 是否為logstash開啟負(fù)載均衡模式

查看部署情況
kubectl get pods -n es
能夠看出每個k8s節(jié)點均自動部署了一個log-pilot容器

log-pilot會自動打一些環(huán)境變量或標(biāo)簽,供接收端使用,如下圖:


log-pilot相關(guān)詳細(xì)參數(shù)及使用可以參考這篇,https://toutiao.io/posts/k0qse0/preview

6.驗證日志寫入情況

我們運(yùn)行一個容器測試日志寫入

master節(jié)點創(chuàng)建一個tomcat.yaml,如下:
apiVersion: v1
kind: Pod
metadata:
  name: tomcat
spec:
  containers:
  - name: tomcat
    image: "tomcat:7.0"
    env:
    - name: aliyun_logs_myTomcat
      value: "stdout" 
    - name: aliyun_logs_access
      value: "/usr/local/tomcat/logs/catalina.*.log" 
    volumeMounts:
      - name: tomcat-log
        mountPath: /usr/local/tomcat/logs
  volumes:
    - name: tomcat-log
      emptyDir: {}

然后執(zhí)行kubectl apply -f tomcat.yaml創(chuàng)建pod

Kibana到management菜單--->索引模式--->創(chuàng)建索引模式
輸入我們的索引名稱加上*,如下圖。
我們索引名稱為index,然后下一步,配置其他項后,保存索引模式。



索引模式創(chuàng)建完畢后,我們點擊【Discover】菜單進(jìn)行查看
先切換索引,然后輸入查詢條件查詢?nèi)罩尽?/p>

7.結(jié)語

ELK生產(chǎn)環(huán)境實施會涉及到ES集群規(guī)劃,節(jié)點/分片/索引/容量規(guī)劃,并非按網(wǎng)上文章直接部署這么簡單,搭建前要詳細(xì)評估。
此外ELK中l(wèi)ogstash功能是比較強(qiáng)大,但其對數(shù)據(jù)處理及路由策略的設(shè)計直接關(guān)系到ES數(shù)據(jù)是否易用,如果這部分沒有花精力規(guī)劃,后期ES數(shù)據(jù)庫將會變成數(shù)據(jù)垃圾堆。
關(guān)于logstash規(guī)則的匹配處理:
grokdebug.herokuapp.com里面可以做測試.
grokdebug.herokuapp.com/patterns 所有可用的patterns都可以在這里查到.
log-pilot組件會自動增加一些默認(rèn)變量供下游使用
k8s_container_name、k8s_pod、k8s_node_name、 k8s_pod_namespace
如logstash表達(dá)式可以這么寫:
output {
elasticsearch {
hosts => "${ES_URL}"
manage_template => false
index => "k8s-%{k8s_container_name}-%{+YYYY.MM.dd}"
}
}
logstash可以看這個系列:
http://doc.yonyoucloud.com/doc/logstash-best-practice-cn/index.html
logstash表達(dá)式可以看這篇文章
https://www.cnblogs.com/xiaobaozi-95/p/9214307.html
參考:
【手把手教你搭建一個 Elasticsearch 集群】
https://www.cnblogs.com/tianyiliang/p/10291305.html
【ES權(quán)威指南1】
https://www.cnblogs.com/Leo_wl/p/7685776.html
【ELK:收集k8s容器日志最佳實踐】
https://www.cnblogs.com/William-Guozi/p/elk-k8s.html
【在阿里,我們是怎么做 K8S 日志實踐的?】
https://toutiao.io/posts/k0qse0/preview

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,755評論 2 371

推薦閱讀更多精彩內(nèi)容