ELK + Filebeat日誌分析系統安裝

来源:https://www.cnblogs.com/dinolin-630/archive/2018/02/09/8422349.html
-Advertisement-
Play Games

之前搭建過elk,用於分析日誌,無奈伺服器資源不足,開了多個Logstash之後發現占用記憶體過高,於是現在改為Filebeat做日誌收集,記錄一下搭建過程和遇到問題的解決方案。 第一步 , 安裝jdk8 。 設置環境變數 在profile文件下,添加 添加之後,執行 使配置生效。 然後輸入 檢驗是否 ...


之前搭建過elk,用於分析日誌,無奈伺服器資源不足,開了多個Logstash之後發現占用記憶體過高,於是現在改為Filebeat做日誌收集,記錄一下搭建過程和遇到問題的解決方案。

第一步 , 安裝jdk8 。 

tar -zxvf jdk-8u112-linux-x64.tar.gz 

設置環境變數

vi /etc/profile

在profile文件下,添加

#set java environment
JAVA_HOME=/usr/local/java/jdk1.8.0_112
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

添加之後,執行

source /etc/profile

使配置生效。 然後輸入 

java -version

檢驗是否成功。

 

成功進入第二步安裝Elasticsearch: 

下載 Elasticsearch 5.1.1 的安裝包, https://www.elastic.co/downloads/past-releases/elasticsearch-5-1-1

執行 

rpm -ivh elasticsearch-5.1.1.rpm

然後看到

[root@localhost elk]# rpm -ivh elasticsearch-5.1.1.rpm
warning: elasticsearch-5.1.1.rpm: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY
Preparing...                ########################################### [100%]
Creating elasticsearch group... OK
Creating elasticsearch user... OK
   1:elasticsearch          ########################################### [100%]
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using chkconfig
 sudo chkconfig --add elasticsearch
### You can start elasticsearch service by executing

說明安裝成功。  然後我們來執行一下, service elasticsearch start 。 

安裝後各個目錄說明

#/usr/share/elasticsearch/               主目錄
#/var/log/elasticsearch                   log日誌

#/etc/sysconfig/elasticsearch          配置elasticsearch環境變數 
#/etc/elasticsearch/elasticsearch.yml  配置elasticsearch集群
#/etc/elasticsearch/jvm.options        配置elasticsearch的jvm參數
#/etc/elasticsearch/log4j2.properties  配置elasticsearch日誌參數

 可能出現各種報錯,解決方案參考 : http://blog.csdn.net/cardinalzbk/article/details/54924511

註意: es啟動要求提高一些系統參數配置,否則會報錯 a. 增大vm.max_map_count到至少262144
sudo vim  /etc/sysctl.conf
添加  vm.max_map_count=262144
sudo sysctl -p
b. 增大文件句柄數至少 65536  ulimit -a查看
sudo vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536

然後,我們對Elasticsearch集群配置文件進行配置 。

vi /etc/elasticsearch/elasticsearch.yml

解開註釋

# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
http.port: 9200

重啟服務 : service elasticsearch restart ,這時來看一下Elasticsearch用了我們多少記憶體,畢竟這次就是為瞭解決資源不足的問題的,top一下

嗯。。。 只剩幾十M記憶體了,什麼情況?  來,看一下jvm配置。

/etc/elasticsearch/jvm.options

好,看到了,預設

-Xms2g
-Xmx2g

我們先測試測試,設個500m試試。 重啟,ok,正常啟動~

Elasticsearch設置ok。

第三步,下載logstash-5.1.1 , 也是下載rpm,然後安裝. 

然後依舊,主體在 /etc/logstash下, 我們先進去bin, 執行

./logstash -e 'input { stdin { } } output { stdout {} }'

然後再隨便輸點東西,就能看到,我們輸入啥,它就輸出啥~ 

[root@localhost bin]# ./logstash -e 'input { stdin { } } output { stdout {} }'
112
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs to console
The stdin plugin is now waiting for input:
00:00:19.669 [[main]-pipeline-manager] INFO  logstash.pipeline - Starting pipeline {"id"=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>125}
00:00:19.688 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
00:00:19.802 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
2018-02-06T16:00:20.050Z localhost.localdomain 112

但是我們可以看到 , 有一個warning 

 Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. 

它說咱們沒有logstash.yml,這個是從logstash5.0之後開始出現的,詳細配置參考官網。

現在這樣啟動之後,發現記憶體還是過大,那我們來看看怎麼把占用記憶體調小一點。

依舊是在/etc/logstash下的jvm.options

我們來設置一下大小

vi /etc/logstash/jvm.options 

-Xms128m
-Xmx256m

先試試,不夠再調大~   

我們看到,我們需要執行logstash的時候非常麻煩,需要先進入目錄再執行啊,這樣不科學~ 來執行下麵的命令

ln -s /usr/share/logstash/bin/logstash /usr/bin/logstash 

然後就可以了~ 

 

第四步,安裝kibana

wget https://artifacts.elastic.co/downloads/kibana/kibana-5.1.1-x86_64.rpm

然後安裝,安裝之後,找到配置文件,在/etc/kibana/kibana.yml

 

server.port: 5601
server.host: 0.0.0.0
elasticsearch.url: "http://192.168.2.178:9200"

 

然後就可以啟動了,不過一樣,我們先創建軟鏈接, 

ln -s /usr/share/kibana/bin/kibana /usr/bin/kibana 

就可以kibana命令啟動了~ 

到這裡,我們的elk已經安裝完成~

 

第五步 , 安裝Filebeat

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.1.1-x86_64.rpm

安裝,創建軟鏈接ln -s /usr/share/filebeat/bin/filebeat /usr/bin/filebeat

接下來就是讓Filebeat跟logstash勾搭起來了~ 

先創建正則表達式目錄 /usr/local/elk/app/logstash-5.1.1/patterns

創建logstash配置文件 : 

vi /etc/logstash/conf.d/pro-log.conf
input {
   beats {
      port => 5044
   }
}
filter {
   if [fields][logIndex] == "nginx" {
      grok {
         patterns_dir => "/usr/local/elk/app/logstash-5.1.1/patterns"
         match => {
            "message" => "%{NGINXACCESS}"
         }
      }
      urldecode {
         charset => "UTF-8"
         field => "url"
      }
      if [upstreamtime] == "" or [upstreamtime] == "null" {
         mutate {
            update => { "upstreamtime" => "0" }
         }
      }
      date {
         match => ["logtime", "dd/MMM/yyyy:HH:mm:ss Z"]
         target => "@timestamp"
      }
      mutate {
         convert => {
            "responsetime" => "float"
            "upstreamtime" => "float"
            "size" => "integer"
         }
         remove_field  => ["port","logtime","message"]
      }

   }
}
output {
   elasticsearch {
      hosts => "192.168.2.178:9200"
      manage_template => false
      index => "%{[fields][logIndex]}-%{+YYYY.MM.dd}"
      document_type => "%{[fields][docType]}"
   }

}

 

我們這裡用nginx的access_log來試試,先看看nginx的配置

  log_format logstash '$http_host $server_addr $remote_addr [$time_local] "$visit_flag" "$jsession_id" "$login_name" "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" '
           '$request_time $upstream_response_time $http_x_forwarded_for $upstream_addr';

 

然後,創建自定義正則文件

vi /usr/local/elk/app/logstash-5.1.1/patterns/nginx

URIPARM1 [A-Za-z0-9$.+!*'|(){},~@#%&/=:;^\\_<>`?\-\[\]]*
URIPATH1 (?:/[\\A-Za-z0-9$.+!*'(){},~:;=@#% \[\]_<>^\-&?]*)+
HOSTNAME1 \b(?:[0-9A-Za-z_\-][0-9A-Za-z-_\-]{0,62})(?:\.(?:[0-9A-Za-z_\-][0-9A-Za-z-:\-_]{0,62}))*(\.?|\b)
STATUS ([0-9.]{0,3}[, ]{0,2})+
HOSTPORT1 (%{IPV4}:%{POSINT}[, ]{0,2})+
FORWORD (?:%{IPV4}[,]?[ ]?)+|%{WORD}
NGINXACCESS (%{HOSTNAME1:http_host}|-) %{IPORHOST:serveraddr} %{IPORHOST:remoteaddr} \[%{HTTPDATE:logtime}\] %{QS:visitflag} %{QS:sessionid} %{QS:loginname} %{QS:request} %{NUMBER:status} %{NUMBER:body_bytes_sent} %{QS:referrer} %{QS:agent} %{NUMBER:upstreamtime} %{NUMBER:responsetime} (%{FORWORD:x_forword_for}|-) (?:%{HOSTPORT1:upstream_addr}|-)

 

啟動logstash

logstash -f /etc/logstash/conf.d/pro-log.conf &

 

ok,啟動之後,我們該啟動Filebeat來試試了

修改filebeat.yml

vi /etc/filebeat/filebeat.yml

filebeat.prospectors:

# Each - is a prospector. Most options can be set at the prospector level, so
# you can use different prospectors for various configurations.
# Below are the prospector specific configurations.

- input_type: log

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /opt/nginx/logs/app.access.log
  fields:
    logIndex: nginx
    docType: nginx-access
    project: app-nginx
#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["{your-logstash-ip}:5044"]

 

啟動 , filebeat -path.config /etc/filebeat/ &

這樣就已經正常監控了,訪問 http://192.168.2.178:5601/

 這時我們能看到nginx的access_log, 但是發現,好多靜態資源的訪問記錄也混在了裡面,我們去nginx配置一下,過濾掉靜態資源的access_log

nginx中設置 access_log off 即可。

 

大體上,ELK+Filebeat已經搞掂了,其餘的就是各種自定義配置的事情了,在這裡就不詳細討論了,有時間再寫配置篇~ 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 現在inline-block貌似可以替代float來實現多個item的排列分佈吧 div是塊級元素,如果不設置他的明確的寬度,那他就等於父元素的寬度,如果想讓他其它隨著子元素的變化而變化,需要改變他的css diplay屬性為inline-block 可包裹div容器 ...
  • 今年在渣X工作整理的常用JS函數 今年來了渣X工作,我所在這個部門分工很奇怪,CSS竟然有專門的人在搞,開發PHP的人員需要處理JS,以至於有時候開發起來不是那麼得心應手,感覺把JS和CSS拆開就像是把方向盤、油門分別交給了兩個人來控制,兩個人都很不得勁。再說說這邊的js吧,完全是那種複製粘貼的方式 ...
  • <c:choose>標簽與Javascript switch語句的功能一樣,用於在眾多選項中做出選擇。 語法格式 屬性 <c:choose></c:choose>和<c:otherwise></c:otherwise>沒有屬性 <c:otherwise></c:otherwise>屬性只有test如 ...
  • 在我們日常開發中,會遇到服務端和客戶端的通訊,今天我們就來比較一下HTML5新特性SSE和WebSocket的用法。 一,SSE 簡介 SSE(Server-Sent Events,伺服器發送事件)是圍繞只讀Comet 交互推出的API 或者模式。 SSE API允許網頁獲得來自伺服器的更新(HTM ...
  • 一、前言 時光荏苒,歲月匆匆。今年年初進入數據平臺部門轉型做Web平臺。要想搞好前端肯定要學好JavaScript,於是準備抓上一倆本書從基礎學起。 二、內容 簡介 JavaScript是一種專為與網頁交互而設計的腳本語言,由下列三個不同的部分組成: 1. ECMAScript,提供核心語言功能; ...
  • 本文最初發表於 "博客園" ,併在 "GitHub" 上持續更新 前端的系列文章 。歡迎在GitHub上關註我,一起入門和進階前端。 以下是正文。 前言 我們在上一篇文章中學習了 "CSS3的選擇器" ,本文來學一下CSS3的一些屬性。 本文主要內容: 顏色 文本 盒模型中的 box sizing ...
  • 教學: 慕課網:https://www.imooc.com/ CSS: CSS參考手冊:http://www.css88.com/book/css/ jQuery: jQuery插件庫:http://www.jq22.com/ 圖片: UI設計網:http://web.cndesign.com/ ...
  • 最近在做後臺管理系統的時候遇到要使用富文本編輯器。最後選擇了ueditor,我的項目使用 vue+vuex+vue-router+webpack+elementUI的方案完成框架的搭建, 1、下載UEditor官網最新的jsp版本的包,下載完成解壓之後得到一個utf8-jsp的文件夾,裡面包含的內容 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...