亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

使用ELK處理Docker日志(一)

singerye / 2857人閱讀

摘要:編者的話產(chǎn)品經(jīng)理為了紀(jì)念四歲生日,撰寫一系列文章,介紹如何使用收集和處理環(huán)境日志。在將日志發(fā)送到的上下文中,使用日志驅(qū)動(dòng)可能是最簡(jiǎn)單的方法。如果使用或日志記錄驅(qū)動(dòng)程序,則需要將定義為輸入。

[編者的話] Daniel Berman ( Logz.io 產(chǎn)品經(jīng)理)為了紀(jì)念 Docker 四歲生日,撰寫一系列文章,介紹如何使用 ELK 收集和處理 Dockerized 環(huán)境日志。小數(shù)今天給大家?guī)?lái)的第一部分將介紹如何安裝各個(gè)組件以及不同日志收集方案的特點(diǎn),下一部分將側(cè)重于分析和可視化,近期發(fā)出,記得關(guān)注我們噢~

PS :數(shù)人云工程師們已奔赴奧斯汀 DockerCON2017 現(xiàn)場(chǎng),更多最佳實(shí)踐后天為您奉上!

容器運(yùn)行程序時(shí)產(chǎn)生的日志具有“無(wú)常,分布,隔離”等特點(diǎn),因此在架構(gòu)中收集 Docker 日志面臨很大的挑戰(zhàn),有待嘗試一種強(qiáng)有力的日志收集和處理方案來(lái)解決此類復(fù)雜問(wèn)題。

ELK ( Elasticsearch , Logstash 和 Kibana )是處理容器日志的一種方式,盡管設(shè)置 ELK 工作流并不容易(難度取決于環(huán)境規(guī)格),但最終可以使用 Kibana 的監(jiān)控面板來(lái)展示 Docker 日志:

.

為了紀(jì)念 Docker 四歲生日,我們將撰寫一系列文章,介紹如何使用 ELK 收集和處理 Dockerized 環(huán)境日志。第一部分將介紹如何安裝各個(gè)組件以及不同日志收集方案的特點(diǎn),并建立從容器中收集日志的工作流,下一部分將側(cè)重于分析和可視化。

日志收集的流程

Dockerized 環(huán)境中的典型 ELK 日志收集流程如下所示:

Logstash 負(fù)責(zé)從各種 Docker 容器和主機(jī)中提取日志,這個(gè)流程的主要優(yōu)點(diǎn)是可以更好地用過(guò)濾器來(lái)解析日志, Logstash 將日志轉(zhuǎn)發(fā)到 Elasticsearch 進(jìn)行索引, Kibana 分析和可視化數(shù)據(jù)。

當(dāng)然這個(gè)流程可以有多種不同的實(shí)現(xiàn)方式, 例如可以使用不同的日志收集和轉(zhuǎn)發(fā)組件, 如 Fluentd 或 Filebeat 將日志發(fā)送到 Elasticsearch ,或者,添加一個(gè)由 Kafka 或 Redis 容器組成的中間層,作為 Logstash 和 Elasticsearch 之間的緩沖區(qū)。上圖顯示了日志從 Docker 到 ELK 的基本流程。

那么,如何設(shè)置這個(gè)流程呢?

組件安裝

可以將 ELK 套件安裝在一個(gè)容器里,也可以使用不同的容器來(lái)分別安裝各個(gè)組件。

關(guān)于在 Docker 上部署 ELK 是否是生產(chǎn)環(huán)境的可行性解決方案(資源消耗和網(wǎng)絡(luò)是主要問(wèn)題)仍然存在很多爭(zhēng)議,但在開發(fā)中這是一種非常方便高效的方案。

ELK 的 docker 鏡像推薦使用 docker-elk, 它支持豐富的運(yùn)行參數(shù)(可使用這些參數(shù)組合不同的版本)和文檔, 而且完全支持最新版本的 Elasticsearch, Logstash, 和 Kibana.

在安裝組件之前需要確保以下端口沒(méi)有被占用:5601 (Kibana), 9200 (Elasticsearch), and 5044 (Logstash).

同時(shí)需要確保內(nèi)核參數(shù) vm_max_map_count 至少設(shè)置為 262144:

sudo sysctl -w vm.max_map_count=262144

To run the stack:

運(yùn)行如下命令:

git clone https://github.com/deviantony/docker-elk.git
cd docker-elk
docker-compose up

正常情況下, ELK 套件的三個(gè)服務(wù)(Elasticsearch, Logstash, Kibana)會(huì)啟動(dòng)成功,默認(rèn)持久化數(shù)據(jù)目錄 /var/lib/elasticsearch (Elasticsearch 的數(shù)據(jù)存儲(chǔ)目錄)

sudo docker ps

CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                            NAMES

73aedc3939ad        dockerelk_kibana          "/bin/sh -c /usr/l..."   7 minutes ago       Up 6 minutes        0.0.0.0:5601->5601/tcp                           dockerelk_kibana_1

b684045be3d6        dockerelk_logstash        "logstash -f /usr/..."   7 minutes ago       Up 6 minutes        0.0.0.0:5000->5000/tcp                           dockerelk_logstash_1

a5778b8e4e6a        dockerelk_elasticsearch   "/bin/bash bin/es-..."   7 minutes ago       Up 7 minutes        0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   dockerelk_elasticsearch_1
測(cè)試安裝組件

可通過(guò)如下的方式來(lái)確保所有組件都能正常運(yùn)行。

首先嘗試訪問(wèn) Elasticsearch 運(yùn)行如下命令:

curl localhost:9200

輸出結(jié)果:

{
 "name" : "W3NuLnv",
 "cluster_name" : "docker-cluster",
 "cluster_uuid" : "fauVIbHoSE2SlN_nDzxxdA",
 "version" : {
   "number" : "5.2.1",
   "build_hash" : "db0d481",
   "build_date" : "2017-02-09T22:05:32.386Z",
   "build_snapshot" : false,
   "lucene_version" : "6.4.1"
 },
 "tagline" : "You Know, for Search"
}

打開 Kibaba 頁(yè)面通過(guò) http://[serverIP]:5601:

值得注意的是需要輸入索引模式才能正常進(jìn)行后續(xù)處理,這個(gè)稍后將會(huì)介紹。

發(fā)送 Docker 日志到 ELK

安裝組件比較簡(jiǎn)單,相比而言將 Docker 日志發(fā)送到 ELK 有點(diǎn)復(fù)雜,這取決于輸出日志的方式。

如果沒(méi)有額外指定,容器的 stdout 和 stderr 輸出(也稱為“ docker logs ”)輸出到 JSON 文件。所以,如果是一個(gè)小型 Docker 環(huán)境,使用 Filebeat 來(lái)收集日志將是不錯(cuò)的選擇。但如果使用其他日志記錄驅(qū)動(dòng)程序,則可能需要考慮其他方法。

以下是將日志導(dǎo)入 ELK 的三種不同的方法,切記,這并不能包含所有的方案。

使用 Filebeat

Filebeat 屬于 Elastic 的 Beats 系列日志收集組件, Filebeat 是用 Go 語(yǔ)言開發(fā)的,支持追蹤特定文件和日志加密的中間組件,它可以配置將日志導(dǎo)出到 Logstash 或者直接導(dǎo)出到 Elasticsearch.

如上所述,若使用默認(rèn)的 json 文件記錄驅(qū)動(dòng)程序, Filebeat 是一種相對(duì)簡(jiǎn)便的方式,可以輸出日志到 ELK.Filebeat 部署在主機(jī)上,或?qū)⑵渥鳛槿萜髋c ELK 容器一起運(yùn)行(在這種情況下,需要添加到 ELK 容器的鏈接),這里有各種Filebeat Docker images可用,有些包括運(yùn)行 Filebeat 并將其連接到 Logstash 的配置。

Filebeat 配置將需要指定 JSON 日志文件的路徑(位于:/ var / lib / docker / containers / ...)和目標(biāo)的詳細(xì)信息(通常是 Logstash 容器)。

下面是一個(gè)配置的例子

prospectors:     
 - paths:        
   - /var/log/containers/          
   document_type: syslog     
output:
 logstash:  
  enabled: true  
  hosts:   
      - elk:5044
使用日志驅(qū)動(dòng)

Docker 從 1.12 開始支持Logging Driver,允許將 Docker 日志路由到指定的第三方日志轉(zhuǎn)發(fā)層,可將日志轉(zhuǎn)發(fā)到 AWS CloudWatch , Fluentd , GELF 或 NAT 服務(wù)器。

使用 logging drivers 比較簡(jiǎn)單,它們需要為每個(gè)容器指定,并且將需要在日志的接收端進(jìn)行其他配置。

在將日志發(fā)送到 ELK 的上下文中,使用 syslog 日志驅(qū)動(dòng)可能是最簡(jiǎn)單的方法。

下面是一個(gè)指定 Logging Driver 的例子:

docker run 
 --log-driver=syslog 
 --log-opt syslog-address=tcp://:5000
  --log-opt syslog-facility=daemon
  alpine ash

如此這樣運(yùn)行每一個(gè)容器,結(jié)果是將 Docker 容器日志流輸出到 syslog 實(shí)例,這些日志將轉(zhuǎn)發(fā)到 Logstash 容器進(jìn)行解析和數(shù)據(jù)增強(qiáng),進(jìn)入 Elasticsearch 。

使用 Logspout

Logspout 是 Docker 流行和輕量級(jí)的( 15.2MB )日志路由器,它將附加到主機(jī)中的所有容器,并將 Docker 日志流輸出到 syslog 服務(wù)器(除非定義了不同的輸出目標(biāo))。

sudo docker run -d --name="logspout" --volume=/var/run/docker.sock:/var/run/docker.sock gliderlabs/logspout syslog+tls://:5000

使用Logstash module直接將日志路由到 Logstash 容器,但這需要其他配置和編譯工作。

Logz.io 的日志采集器

本人在 In this blog post這篇文章中介紹了 Logz.io 的日志采集器,像 Logspout 一樣,它附加在 Docker 主機(jī)中的所有容器上,但它不僅運(yùn)送 Docker 日志,還包含 Docker 統(tǒng)計(jì)信息和 Docker 守護(hù)程序事件。

docker run -d --restart=always -v /var/run/docker.sock:/var/run/docker.sock logzio/logzio-docker -t 

目前它是為 Logz.io ELK 套件的用戶設(shè)計(jì)的,我們正在努力將它開源項(xiàng)目。

數(shù)據(jù)持久化

配置 Logstash 來(lái)解析數(shù)據(jù)至關(guān)重要,因?yàn)檫@部分過(guò)程將添加上下文到容器的日志中,并能夠更輕松地分析數(shù)據(jù)。

在 Logstash 配置文件中需要配置三個(gè)主要部分:輸入,過(guò)濾和輸出。 (若運(yùn)行的是 Logstash 5.x ,則該文件位于:/ usr / share / logstash / pipeline )

輸入取決于日志傳送方式,使用 Filebeat ,則需要指定 Beats 輸入插件。如果使用 logspout 或 syslog 日志記錄驅(qū)動(dòng)程序,則需要將 syslog 定義為輸入。

過(guò)濾器部分包含用于分解日志消息的所有過(guò)濾器插件,依賴于正在記錄的容器類型以及該特定容器生成的日志消息。

這部分的配置沒(méi)有捷徑,因?yàn)槊總€(gè)容器都輸出不同類型的日志。有很多嘗試和錯(cuò)誤涉及,但是有一些在線工具可參考, 比如:Grok Debugger。

導(dǎo)出部分將指定 Logstash 輸出,例子中是 Elasticsearch 容器。

以下是通過(guò) syslog 發(fā)送的 Docker 日志的基本 Logstash 配置示例。注意一系列過(guò)濾器的使用( grok , date , mutate 和 if 條件):

input {
 syslog {
      port => 5000
      type => "docker"
      }
}

filter {
      grok {
            match => { "message" => "%{SYSLOG5424PRI}%{NONNEGINT:ver} +(?:%{TIMESTAMP_ISO8601:ts}|-) +(?:%{HOSTNAME:service}|-) +(?:%{NOTSPACE:containerName}|-) +(?:%{NOTSPACE:proc}|-) +(?:%{WORD:msgid}|-) +(?:%{SYSLOG5424SD:sd}|-|) +%{GREEDYDATA:msg}" }
      }
      syslog_pri { }
      date {
            match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
      }
      mutate {
            remove_field => [ "message", "priority", "ts", "severity", "facility", "facility_label", "severity_label", "syslog5424_pri", "proc", "syslog_severity_code", "syslog_facility_code", "syslog_facility", "syslog_severity", "syslog_hostname", "syslog_message", "syslog_timestamp", "ver" ]
      }
      mutate {
            remove_tag => [ "_grokparsefailure_sysloginput" ]
      }
      mutate {
            gsub => [
                  "service", "[0123456789-]", ""
            ]
      }
      if [msg] =~ "^ *{" {
            json {
                  source => "msg"
            }
            if "_jsonparsefailure" in [tags] {
                  drop {}
            }
            mutate {
                  remove_field => [ "msg" ]
            }
      }
}

output {
 elasticsearch {
      hosts => "elasticsearch:9200"
      }
}

重新啟動(dòng) Logstash 容器以應(yīng)用新的配置。檢查 Elasticsearch 索引,確保日志流能正常工作:

curl "localhost:9200/_cat/indices?v"

具有 Logstash 模式的索引:

health status index               uuid                   pri rep docs.count docs.deleted store.size pri.store.size

yellow open   logstash-2017.03.05 kgJ0P6jmQjOLNTSmnxsZWQ   5   1          3            0     10.1kb         10.1kb

yellow open   .kibana             09NHQ-TnQQmRBnVE2Y93Kw   1   1          1            0      3.2kb          3.2kb

打開 Kibana 的頁(yè)面

Kibana 已經(jīng)創(chuàng)建了"logstash- *" 索引是標(biāo)識(shí),按下“創(chuàng)建”按鈕,可在 Kibana 中看到日志。

結(jié)語(yǔ)

Docker 日志記錄沒(méi)有完美的方案,無(wú)論選擇什么解決方案,使用日志記錄驅(qū)動(dòng)程序, Filebeat 還是 SaaS 監(jiān)控平臺(tái),每個(gè)方案都有優(yōu)缺點(diǎn)。

值得一提的是, Docker 日志很有用,但它們只代表由 Docker 主機(jī)生成的數(shù)據(jù)的一個(gè)維度,檢索容器統(tǒng)計(jì)信息和守護(hù)程序事件等還需要額外的日志記錄層。

綜上所述, Logz.io 日志收集器提供了一個(gè)全面的日志解決方案,將三個(gè)數(shù)據(jù)流一起拉到 ELK 中。如需統(tǒng)計(jì)數(shù)據(jù),建議嘗試一下 Dockerbeat.

本系列的下一部分將重點(diǎn)介紹如何在 Kibana 中分析和可視化 Docker 日志。

Docker 生日快樂(lè)!

Daniel Berman 是 Logz.io 產(chǎn)品經(jīng)理。擅長(zhǎng)日志分析、大數(shù)據(jù)、云計(jì)算,熱愛(ài)家庭,喜歡跑步,Liverpool FC 和寫顛覆性的技術(shù)內(nèi)容。

原文鏈接: https://logz.io/blog/docker-l...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/26851.html

相關(guān)文章

  • 使用ELK處理Docker日志(二)

    摘要:環(huán)境要求由,和容器組成使用日志收集器將日志發(fā)送到。若使用自己的部署,分析和可視化日志的概念保持不變。日志可視化以索引數(shù)據(jù)為基礎(chǔ)創(chuàng)建豐富的可視化和儀表板的能力而聞名,事實(shí)上,得到這些數(shù)據(jù)并不容易。 昨天小數(shù)分享的使用ELK處理Docker日志(一)很受歡迎,今天迫不及待的帶來(lái)第二篇,側(cè)重于分析和可視化,期待給您帶來(lái)幫助:) 噓,聽(tīng)說(shuō)數(shù)人云工程師們?cè)趭W斯汀DockerCON2017買了D...

    LiveVideoStack 評(píng)論0 收藏0
  • 使用Docker快速部署ELK分析Nginx日志實(shí)踐

    摘要:數(shù)據(jù)導(dǎo)入與校驗(yàn)容器運(yùn)行之后,筆者需要驗(yàn)證是否啟動(dòng)成功,可以通過(guò)瀏覽器訪問(wèn)和的頁(yè)面是否成功來(lái)判斷。的整體操作流程比較簡(jiǎn)單,首先是收集各種日志并進(jìn)行過(guò)濾,然后將過(guò)濾后的內(nèi)容發(fā)送到服務(wù)中,最后用戶通過(guò)的頁(yè)面查看中的日志數(shù)據(jù)作者湯青松微信日期 一、背景 筆者所在項(xiàng)目組的項(xiàng)目由多個(gè)子項(xiàng)目所組成,每一個(gè)子項(xiàng)目都存在一定的日志,有時(shí)候想排查一些問(wèn)題,需要到各個(gè)地方去查看,極為不方便,此前聽(tīng)說(shuō)有ELK...

    el09xccxy 評(píng)論0 收藏0
  • 使用Docker快速部署ELK分析Nginx日志實(shí)踐

    摘要:數(shù)據(jù)導(dǎo)入與校驗(yàn)容器運(yùn)行之后,筆者需要驗(yàn)證是否啟動(dòng)成功,可以通過(guò)瀏覽器訪問(wèn)和的頁(yè)面是否成功來(lái)判斷。的整體操作流程比較簡(jiǎn)單,首先是收集各種日志并進(jìn)行過(guò)濾,然后將過(guò)濾后的內(nèi)容發(fā)送到服務(wù)中,最后用戶通過(guò)的頁(yè)面查看中的日志數(shù)據(jù)作者湯青松微信日期 一、背景 筆者所在項(xiàng)目組的項(xiàng)目由多個(gè)子項(xiàng)目所組成,每一個(gè)子項(xiàng)目都存在一定的日志,有時(shí)候想排查一些問(wèn)題,需要到各個(gè)地方去查看,極為不方便,此前聽(tīng)說(shuō)有ELK...

    chenatu 評(píng)論0 收藏0
  • 使用Docker快速部署ELK分析Nginx日志實(shí)踐

    摘要:數(shù)據(jù)導(dǎo)入與校驗(yàn)容器運(yùn)行之后,筆者需要驗(yàn)證是否啟動(dòng)成功,可以通過(guò)瀏覽器訪問(wèn)和的頁(yè)面是否成功來(lái)判斷。的整體操作流程比較簡(jiǎn)單,首先是收集各種日志并進(jìn)行過(guò)濾,然后將過(guò)濾后的內(nèi)容發(fā)送到服務(wù)中,最后用戶通過(guò)的頁(yè)面查看中的日志數(shù)據(jù)作者湯青松微信日期 一、背景 筆者所在項(xiàng)目組的項(xiàng)目由多個(gè)子項(xiàng)目所組成,每一個(gè)子項(xiàng)目都存在一定的日志,有時(shí)候想排查一些問(wèn)題,需要到各個(gè)地方去查看,極為不方便,此前聽(tīng)說(shuō)有ELK...

    xumenger 評(píng)論0 收藏0
  • 如何在 Rancher 中統(tǒng)管理容器日志

    摘要:在中默認(rèn)開啟端口用于偵聽(tīng)發(fā)送過(guò)來(lái)的日志報(bào)文。至此,在中如何部署一套完整系統(tǒng)已經(jīng)介紹完了,下面我將介紹如何將容器日志發(fā)送到中。下面我將介紹如何收集容器日志。目前日志顯的雜亂無(wú)序。,現(xiàn)在我們?cè)偃ゲ榭窗l(fā)現(xiàn)我們的容器日志已經(jīng)展示在這里了。 相信大家對(duì)于容器和 docker 這個(gè)概念并不陌生,很高興的是 docker 為我們提供了多種log-driver。 showImg(https://se...

    whinc 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<