日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

互联网亿级日志实时分析平台,一个码农半小时就可以搞定,只因ELK

發布時間:2025/3/15 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 互联网亿级日志实时分析平台,一个码农半小时就可以搞定,只因ELK 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一,前言

人們常常說數據如金,可是,能被利用起的數據,才是“金”。而互聯網的數據,常常以日志的媒介的形式存在,并需要從中提取其中的"數據"。

從這些數據中,我們可以做用戶畫像(每個用戶都點了什么廣告,對哪些開源技術感興趣),安全審計,安全防護(如果1小時內登錄請求數到達一定值就報警),業務數據統計(如開源中國每天的博客數是多少,可視化編輯格式和markdown格式各占比例是多少)等等。

之所以能做這些,是因為用戶的所有的行為,都將被記錄在nginx日志中或其它web服務器的日志中。日志分析要做的就是將這些日志進行結構化,方便我們的業務人員快速查詢。日志分析平臺要做的就是這些。

說完這些,你是不是覺得日志分析平臺很難做,需要十人的團隊加班幾個月才能完成?

自從有了Elasticsearch、Logstash、Kibana,俗稱ELK,小公司也可以很輕松地做日志分析了。說白了,1天幾G的日志,ELK完全可以吃得消。就像標題說的,只需要1個人半小時就可以搭建好了。

二,集中式日志分析平臺特點

  • 收集-能夠采集多種來源的日志數據
  • 傳輸-能夠穩定的把日志數據傳輸到中央系統
  • 存儲-如何存儲日志數據
  • 分析-可以支持 UI 分析
  • 警告-能夠提供錯誤報告,監控機制 ELK完美的解決上述場景。

三,ELK Stack 簡介

ELK 不是一款軟件,而是 Elasticsearch、Logstash 和 Kibana 三種軟件產品的首字母縮寫。這三者都是開源軟件,通常配合使用,而且又先后歸于 Elastic.co 公司名下,所以被簡稱為 ELK Stack。根據 Google Trend 的信息顯示,ELK Stack 已經成為目前最流行的集中式日志解決方案。

?

  • Elasticsearch:分布式搜索和分析引擎,具有高可伸縮、高可靠和易管理等特點。基于 Apache Lucene 構建,能對大容量的數據進行接近實時的存儲、搜索和分析操作。通常被用作某些應用的基礎搜索引擎,使其具有復雜的搜索功能;
  • Logstash:數據收集引擎。它支持動態的從各種數據源搜集數據,并對數據進行過濾、分析、豐富、統一格式等操作,然后存儲到用戶指定的位置;
  • Kibana:數據分析和可視化平臺。通常與 Elasticsearch 配合使用,對其中數據進行搜索、分析和以統計圖表的方式展示;
  • Filebeat:ELK 協議棧的新成員,一個輕量級開源日志文件數據搜集器,基于 Logstash-Forwarder 源代碼開發,是對它的替代。在需要采集日志數據的 server 上安裝 Filebeat,并指定日志目錄或日志文件后,Filebeat 就能讀取數據,迅速發送到 Logstash 進行解析,亦或直接發送到 Elasticsearch 進行集中式存儲和分析。

四,ELK 常用架構及使用場景

最簡單架構

在這種架構中,只有一個 Logstash、Elasticsearch 和 Kibana 實例。Logstash 通過輸入插件從多種數據源(比如日志文件、標準輸入 Stdin 等)獲取數據,再經過濾插件加工數據,然后經 Elasticsearch 輸出插件輸出到 Elasticsearch,通過 Kibana 展示。詳見圖 1。 圖 1. 最簡單架構

這種架構非常簡單,使用場景也有限。初學者可以搭建這個架構,了解 ELK 如何工作。

Logstash 作為日志搜集器

這種架構是對上面架構的擴展,把一個 Logstash 數據搜集節點擴展到多個,分布于多臺機器,將解析好的數據發送到 Elasticsearch server 進行存儲,最后在 Kibana 查詢、生成日志報表等。詳見圖 2。 圖 2. Logstash 作為日志搜索器

這種結構因為需要在各個服務器上部署 Logstash,而它比較消耗 CPU 和內存資源,所以比較適合計算資源豐富的服務器,否則容易造成服務器性能下降,甚至可能導致無法正常工作。

Beats 作為日志搜集器

這種架構引入 Beats 作為日志搜集器。目前 Beats 包括四種:

?

  • Packetbeat(搜集網絡流量數據);
  • Topbeat(搜集系統、進程和文件系統級別的 CPU 和內存使用情況等數據);
  • Filebeat(搜集文件數據);
  • Winlogbeat(搜集 Windows 事件日志數據)。

Beats 將搜集到的數據發送到 Logstash,經 Logstash 解析、過濾后,將其發送到 Elasticsearch 存儲,并由 Kibana 呈現給用戶。詳見圖 3。

圖 3. Beats 作為日志搜集器

這種架構解決了 Logstash 在各服務器節點上占用系統資源高的問題。相比 Logstash,Beats 所占系統的 CPU 和內存幾乎可以忽略不計。另外,Beats 和 Logstash 之間支持 SSL/TLS 加密傳輸,客戶端和服務器雙向認證,保證了通信安全。 因此這種架構適合對數據安全性要求較高,同時各服務器性能比較敏感的場景。

引入消息隊列機制的架構

這種架構使用 Logstash 從各個數據源搜集數據,然后經消息隊列輸出插件輸出到消息隊列中。目前 Logstash 支持 Kafka、Redis、RabbitMQ 等常見消息隊列。然后 Logstash 通過消息隊列輸入插件從隊列中獲取數據,分析過濾后經輸出插件發送到 Elasticsearch,最后通過 Kibana 展示。詳見圖 4。

圖 4. 引入消息隊列機制的架構

這種架構適合于日志規模比較龐大的情況。但由于 Logstash 日志解析節點和 Elasticsearch 的負荷比較重,可將他們配置為集群模式,以分擔負荷。引入消息隊列,均衡了網絡傳輸,從而降低了網絡閉塞,尤其是丟失數據的可能性,但依然存在 Logstash 占用系統資源過多的問題。

基于 Filebeat 架構的配置部署詳解

前面提到 Filebeat 已經完全替代了 Logstash-Forwarder 成為新一代的日志采集器,同時鑒于它輕量、安全等特點,越來越多人開始使用它。這個章節將詳細講解如何部署基于 Filebeat 的 ELK 集中式日志解決方案,具體架構見圖 5。

圖 5. 基于 Filebeat 的 ELK 集群架構

因為免費的 ELK 沒有任何安全機制,所以這里使用了 Nginx 作反向代理,避免用戶直接訪問 Kibana 服務器。加上配置 Nginx 實現簡單的用戶認證,一定程度上提高安全性。另外,Nginx 本身具有負載均衡的作用,能夠提高系統訪問性能。

五,實戰

具體安裝過程如下

  • 步驟 1,安裝 JDK
  • 步驟 2,安裝 Elasticsearch
  • 步驟 3,安裝 Kibana
  • 步驟 4,安裝 Nginx
  • 步驟 5,安裝 Logstash
  • 步驟 6,配置 Logstash
  • 步驟 7,安裝 Logstash-forwarder
  • 步驟 8,最終驗證

安裝前的準備

  • 兩臺 64 位虛擬機,操作系統是 Ubuntu 14.04,2 CPU,4G 內存,30G 硬盤
  • 兩臺 64 位虛擬機,操作系統是 CentOS 7.1,2 CPU,4G 內存,30G 硬盤
  • 創建用戶 elk 和組 elk,以下所有的安裝均由這個用戶操作,并授予 sudo 權限
  • 如果是 CentOS,還需要配置官方 YUM 源,可以訪問 CentOS 軟件包
  • 注意:以下所有操作都是在兩個平臺上完成。

    步驟 1,安裝 JDK

    Elasticsearch 要求至少 Java 7。一般推薦使用 Oracle JDK 1.8 或者 OpenJDK 1.8。我們這里使用 OpenJDK 1.8。

    Ubuntu 14.04

    加入 Java 軟件源(Repository)

    $ sudo add-apt-repository ppa:openjdk-r/ppa

    更新系統并安裝 JDK

    $ sudo apt-get update $ sudo apt-get install openjdk-8-jdk

    驗證 Java

    $ java -version openjdk version "1.8.0_45-internal" OpenJDK Runtime Environment (build 1.8.0_45-internal-b14) OpenJDK 64-Bit Server VM (build 25.45-b02, mixed mode)

    CentOS 7.1

    配置 YUM 源

    $ cd /etc/yum.repos.d $ sudo vi centos.repo

    加入以下內容

    [base] name=CentOS-$releasever - Base mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates [updates] name=CentOS-$releasever - Updates mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/ gpgcheck=1 gpgkey=<a href="../../../../../etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7"><code>file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7</code></a>

    安裝 JDK

    $ sudo yum install java-1.8.0-openjdk

    驗證 Java

    $ java -version openjdk version "1.8.0_65" OpenJDK Runtime Environment (build 1.8.0_65-b17) OpenJDK 64-Bit Server VM (build 25.65-b01, mixed mode)

    步驟 2,安裝 Elasticsearch

    Ubuntu 14.04

    下載 Elasticsearch 軟件

    $ wgethttps://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.1.0/elasticsearch-2.1.0.tar.gz

    解壓

    $ tar xzvf elasticsearch-2.1.0.tar.gz

    文件目錄結構如下:

    $ pwd /home/elk/elasticsearch-2.1.0 $ ls bin config lib LICENSE.txt NOTICE.txt README.textile

    修改配置文件

    $ cd config $ vi elasticsearch.yml

    找到 # network.host 一行,修改成以下:

    network.host: localhost

    啟動 elasticsearch

    $ cd ../bin $ ./elasticsearch

    驗證 elasticsearch

    $ curl 'localhost:9200/' {"name" : "Surge","cluster_name" : "elasticsearch","version" : {"number" : "2.1.0","build_hash" : "72cd1f1a3eee09505e036106146dc1949dc5dc87","build_timestamp" : "2015-11-18T22:40:03Z","build_snapshot" : false,"lucene_version" : "5.3.1"},"tagline" : "You Know, for Search" }

    CentOS 7.1

    步驟和上述 Ubuntu 14.04 安裝完全一致

    步驟 3,安裝 Kibana

    Ubuntu 14.04

    下載 Kibana 安裝軟件

    $ wget https://download.elastic.co/kibana/kibana/kibana-4.3.0-linux-x64.tar.gz

    解壓

    $ tar xzvf kibana-4.3.0-linux-x64.tar.gz

    文件目錄結構如下:

    $ pwd /home/elk/kibana-4.3.0-linux-x64 $ ls bin config installedPlugins LICENSE.txt node node_modules optimize package.json README.txt src webpackShims

    修改配置文件

    $ cd config $ vi kibana.yml

    找到 # server.host,修改成以下:

    server.host:“localhost”

    啟動 Kibana

    $ cd ../bin $ ./kibana […]log [07:50:29.926] [info][listening] Server running at http://localhost:5601 […]

    驗證 Kibana

    由于我們是配置在 localhost,所以是無法直接訪問 Web 頁面的。

    可以使用 netstat 來檢查缺省端口 5601,或者使用 curl:

    $ curl localhost:5601 <script>var hashRoute = '/app/kibana'; var defaultRoute = '/app/kibana';var hash = window.location.hash; if (hash.length) {window.location = hashRoute + hash; } else {window.location = defaultRoute; }</script>

    CentOS 7.1

    步驟和上述 Ubuntu 14.04 安裝完全一致。

    步驟 4,安裝 Nginx

    Nginx 提供了反向代理服務,可以使外面的請求被發送到內部的應用上。

    Ubuntu 14.04

    安裝軟件

    $ sudo apt-get install nginx apache2-utils

    修改 Nginx 配置文件

    $ sudo vi /etc/nginx/sites-available/default

    找到 server_name,修改成正確的值。或者使用 IP,或者使用 FQDN。

    然后在加入下面一段內容:

    server {listen 80;server_name example.com;location / {proxy_pass http://localhost:5601;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';proxy_set_header Host $host;proxy_cache_bypass $http_upgrade; }}

    注意:建議使用 IP。

    重啟 Nginx 服務

    $ sudo service nginx restart

    驗證訪問

    http://FQDN 或者 http://IP

    CentOS 7.1

    配置 Nginx 官方 yum 源

    $ sudo vi /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=1

    安裝軟件

    $ sudo yum install nginx httpd-tools

    修改 Nginx 配置文件

    $ sudo vi /etc/nginx/nginx.conf

    檢查是否 http 塊(http{...})含有下面這一行:

    include /etc/nginx/conf.d/*conf

    為 Kibana 創建一個配置文件

    $ sudo vi /etc/nginx/conf.d/kibana.conf

    加入以下這一段內容:

    server {listen 80;server_name example.com;location / {proxy_pass http://localhost:5601;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection 'upgrade';proxy_set_header Host $host;proxy_cache_bypass $http_upgrade; } }

    注意:建議使用 IP。

    啟動 Nginx 服務

    $ sudo systemctl enable nginx $ sudo systemctl start nginx

    驗證訪問

    http://FQDN 或者 http://IP

    步驟 5,安裝 Logstash

    Ubuntu 14.04

    下載 Logstash 安裝軟件

    $ wget https://download.elastic.co/logstash/logstash/logstash-2.1.1.tar.gz

    解壓

    $ tar xzvf logstash-2.1.1.tar.gz

    文件目錄結構如下:

    $ pwd /home/elk/logstash-2.1.1$ ls bin CHANGELOG.md CONTRIBUTORS Gemfile Gemfile.jruby-1.9.lock lib LICENSE NOTICE.TXT vendor

    驗證 Logstash

    $ cd bin $ ./logstash -e 'input { stdin { } } output { stdout {} }' Settings: Default filter workers: 1 Logstash startup completed

    顯示如下:

    hello elk stack 2015-12-14T01:17:24.104Z 0.0.0.0 hello elk stack

    說明 Logstash 已經可以正常工作了。按CTRL-D 退出

    CentOS 7.1

    步驟和上述 Ubuntu 14.04 安裝完全一致。

    步驟 6,配置 Logstash

    我們需要配置 Logstash 以指明從哪里讀取數據,向哪里輸出數據。這個過程我們稱之為定義 Logstash 管道(Logstash Pipeline)。

    通常一個管道需要包括必須的輸入(input),輸出(output),和一個可選項目 Filter。見圖 7。

    圖 7.Logstash 管道結構示意

    標準的管道配置文件格式如下:

    # The # character at the beginning of a line indicates a comment. Use # comments to describe your configuration. input { } # The filter part of this file is commented out to indicate that it is # optional. #filter { #} output { }

    每一個輸入/輸出塊里面都可以包含多個源。Filter 是定義如何按照用戶指定的格式寫數據。

    由于我們這次是使用 logstash-forwarder 從客戶機向服務器來傳輸數據,作為輸入數據源。所以,我們首先需要配置 SSL 證書(Certification)。用來在客戶機和服務器之間驗證身份。

    Ubuntu 14.04

    配置 SSL

    $ sudo mkdir -p /etc/pki/tls/certs etc/pki/tls/private $ sudo vi /etc/ssl/openssl.cnf

    找到 [v3_ca] 段,添加下面一行,保存退出。

    subjectAltName = IP: logstash_server_ip

    執行下面命令:

    $ cd /etc/pki/tls $ sudo openssl req -config /etc/ssl/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

    這里產生的 logstash-forwarder.crt 文件會在下一節安裝配置 Logstash-forwarder 的時候使用到。

    配置 Logstash 管道文件

    $ cd /home/elk/logstash-2.1.1 $ mkdir conf $ vi simple.conf

    添加以下內容:

    input {lumberjack {port => 5043type => "logs"ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"} } filter {grok {match => { "message" => "%{COMBINEDAPACHELOG}" }}date {match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]} } output {elasticsearch { hosts => ["localhost:9200"] }stdout { codec => rubydebug } }

    啟動 Logstsh

    $ cd /home/elk/logstash-2.1.1/bin $ ./logstash -f ../conf/simple.conf

    CentOS 7.1

    在 CentOS 7.1 上配置 Logstash,只有一步配置 SSL 是稍微有點不同,其他全部一樣。

    $ sudo vi /etc/pki/tls/openssl.cnf

    找到 [v3_ca] 段,添加下面一行,保存退出。

    subjectAltName = IP: logstash_server_ip$ cd /etc/pki/tls $ sudo openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

    這里產生的 logstash-forwarder.crt 文件會在下一節安裝配置 Logstash-forwarder 的時候使用到。

    步驟 7,安裝 Logstash-forwarder

    注意:Logstash-forwarder 也是一個開源項目,最早是由 lumberjack 改名而來。在作者寫這篇文章的時候,被吸收合并到了 Elastic.co 公司的另外一個產品 Beat 中的 FileBeat。如果是用 FileBeat,配置稍微有些不一樣,具體需要去參考官網。

    Ubuntu14.04

    安裝 Logstash-forwarder 軟件

    注意:Logstash-forwarder 是安裝在另外一臺機器上。用來模擬客戶機傳輸數據到 Logstash 服務器。

    配置 Logstash-forwarder 安裝源

    執行以下命令:

    $ echo 'deb http://packages.elastic.co/logstashforwarder/debian stable main' | sudo tee /etc/apt/sources.list.d/logstashforwarder.list

    $ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

    安裝軟件包

    $ sudo apt-get update $ sudo apt-get install Logstash-forwarder

    配置 SSL

    $ sudo mkdir -p /etc/pki/tls/certs

    把在步驟六中在 Logstash 服務器上產生的 ssl 證書文件拷貝到剛剛創建出來的目錄下:

    $ sudo scp user@logstash_server:/etc/pki/tls/certs/logstash_forwarder.crt /etc/pki/tls/certs/

    配置 Logstash-forwarder

    $ sudo vi /etc/logstash-forwarder.conf

    在 network 段("network": {),修改如下:

    "servers": [ "logstash_server_private_address:5043" ], "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt", "timeout": 15

    在 files 段("files": [),修改如下:

    { "paths": ["/var/log/syslog","/var/log/auth.log"],"fields": { "type": "syslog" } }

    啟動 Logstash-forwarder

    $ sudo service logstash-forwarder start

    驗證 Logstash-forwarder

    $ sudo service logstash-forwarder status logstash-forwarder is running

    如果有錯誤,則需要去/var/log/logstash-forwarder 目錄下面檢查。

    CentOS 7.1

    配置 Logstash-forwarder 安裝源

    執行以下命令:

    $ sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch$ sudo vi /etc/yum.repos.d/logstash-forwarder.repo

    加入以下內容:

    [logstash-forwarder] name=logstash-forwarder repository baseurl=http://packages.elastic.co/logstashforwarder/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1

    存盤退出。

    安裝軟件包

    $ sudo yum -y install logstash-forwarder

    剩余步驟和上述在 Ubuntu 14.04 上面的做法完全一樣。

    步驟 8,最后驗證

    在前面安裝 Kibana 的時候,曾經有過驗證。不過,當時沒有數據,打開 Web 頁面的時候,將如下所示:

    圖 8. 無數據初始頁面

    現在,由于 logstash-forwarder 已經開始傳輸數據了,再次打開 Web 頁面,將如下所示:

    圖 9. 配置索引頁面

    點擊創建按鈕(Create),在選擇 Discover,可以看到如下畫面:

    圖 10. 數據展示頁面

    至此,所有部件的工作都可以正常使用了。關于如何具體使用 Kibana 就不在本文中加以描述了,有興趣的同學可以參考官網。

    文章參考出處:

    https://my.oschina.net/zjzhai/blog/751246

    https://www.zybuluo.com/dume2007/note/665868

    https://www.ibm.com/developerworks/cn/opensource/os-cn-elk/index.html

    原文發布于微信公眾號 - 架構師小秘圈(seexmq)

    原文發表時間:2017-09-25

    本文參與騰訊云自媒體分享計劃,歡迎正在閱讀的你也加入,一起分享。

    發表于 2018-04-02

    ?

    https://cloud.tencent.com/developer/article/1082326

    與50位技術專家面對面20年技術見證,附贈技術全景圖

    總結

    以上是生活随笔為你收集整理的互联网亿级日志实时分析平台,一个码农半小时就可以搞定,只因ELK的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。