玩轉ELK之三件套安裝配置詳解

  

ELK是啥子???java

  ELK 是elastic公司提供的一套完整的日誌收集以及展現的解決方案,是三個產品的首字母縮寫,分別是ElasticSearch、Logstash 和 Kibana。node

特色:linux

收集-可以採集多種來源的日誌數據
傳輸-可以穩定的把日誌數據傳輸到中央系統
存儲-如何存儲日誌數據
分析-能夠支持 UI 分析
警告-可以提供錯誤報告,監控機制nginx

Elasticsearch是個開源分佈式搜索引擎,提供蒐集、分析、存儲數據三大功能。apache

  特色:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。
Logstash 主要是用來日誌的蒐集、分析、過濾日誌的工具,支持大量的數據獲取方式。
  通常工做方式爲c/s架構,client端安裝在須要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操做在一併發往elasticsearch上去。
Kibana 也是一個開源和免費的工具,Kibana能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助彙總、分析和搜索重要數據日誌。
Filebeat隸屬於Beats。目前Beats包含四種工具:
  Packetbeat(蒐集網絡流量數據)
  Topbeat(蒐集系統、進程和文件系統級別的 CPU 和內存使用狀況等數據)
  Filebeat(蒐集文件數據)
  Winlogbeat(蒐集 Windows 事件日誌數據)npm

第一步:環境基本配置:配置主機名和磁盤掛載,兩個節點都要配置
  提早添加30G的硬盤,這傢伙統計日誌量真的很大,提早給好空間,內存配置至少得2G以上,我一開始是1G,結果服務總是失敗,看狀況而定,多給一點,仍是比較好的vim

  [root@linux-node01 ~]# cat /etc/redhat-release 瀏覽器

  CentOS Linux release 7.4.1708 (Core)    #個人機子是Centos7.4,咋說也得七以上吧,六沒試ruby

  [root@linux-node01 ~]# uname -a
  Linux linux-node01 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux服務器

  注意一下,本文配置顯示結果只是顯示要添加的部分,配置比較全,也比較詳細,寫給對ELK蠢蠢欲動缺不敢動的大家,嘿嘿嘿

    

  [root@linux-node01 ~]# cat /etc/hosts #兩個節點都要寫
  192.168.2.130 linux-node01 linux-node1.example.com
  192.168.2.132 linux-node02 linux-node2.example.com
  [root@linux-node01 ~]fdisk -l /dev/sdb #查看你添加的硬盤設備是否存在
  [root@linux-node01 ~]mkfs.xfs /dev/sdb #加磁盤以後分區,而後格式化,這是一個基本的操做流程,這裏我就不分區了,直接使用格式化,文件系統的類型問xfs 

  [root@linux-node01 ~]# blkid /dev/sdb #查看一下UUID和類型
  /dev/sdb: UUID="dc0f16bb-ae77-4a16-b1c7-b51d3f4b6e32" TYPE="xfs"
  [root@linux-node01 ~]# mkdir /elk  
  [root@linux-node01 ~]# cat /etc/fstab #加入開機自動掛載
  UUID="dc0f16bb-ae77-4a16-b1c7-b51d3f4b6e32" /elk xfs defaults 0 0  #把這行加進去就ok

  [root@linux-node01 ~]# mount -a  #掛載一會兒,直接all

  [root@linux-node01 ~]# df -TH   # df 的參數H和h差很少都是以人類可讀的方式顯示,只不過H的基準是1000而不是1024,因此看的時候多出來3G,實際空間大小爲30G
  /dev/sdb xfs 33G 34M 33G 1% /elk   #看到這個就說明咱們將磁盤掛載成功了

  ******以上的主機名和磁盤在兩個節點都是要添加的*******

第二步:安裝elasticsearch和java環境 ,兩個節點都要安裝配置
  [root@linux-node01 ~]# ls   

  #將rpm的包下載到本地,能夠去官網直接下載選擇版本,我參考的資料有點老,可是功能不影響,就用5.6.5了,路先走通,才能變通,不要以爲版本舊就不嘗試,新的東西資料少,錯誤多,

  a anaconda-ks.cfg elasticsearch-5.6.5.rpm jdk-8u151-linux-x64.rpm  #這裏注意一下,你去官網看的時候它對JAVA的版本有一個說明
  [root@linux-node01 ~]# yum -y install *.rpm  # *就是全部啦,之前以爲學東西沒有啥子用,到了用的時候就以爲真方便,一個符號就能代替全部,呼哈
  Installed:
  elasticsearch.noarch 0:5.6.5-1 jdk1.8.x86_64 2000:1.8.0_151-fcs
  Complete!  #看到這個就說明java環境和elasticsearch安裝好了 ,安裝這兩個包,也能夠二進制安裝,兩個node都要安裝

  [root@linux-node02 ~]# yum -y install iotop #安裝一個io查看工具 ,從名字就能看出和top用法同樣,專門針對IO的

第三步:修改elasticsearch配置文件 

  關閉防火牆和selinux ,

  systemctl  stop  firewalld    

  臨時修改 setenforce 0 

  永久修改/etc/selinux/conf 中   SELINUX=disabled

node2修改
  [root@linux-node02 ~]# vim /etc/elasticsearch/elasticsearch.yml  

  [root@linux-node02 elasticsearch]# egrep -v "^#" elasticsearch.yml  #最後修改以後的配置以下,這七行都要添加
  cluster.name: elk-cluster1              #  集羣名字,同一個集羣名字必須相同,學學英語,很重要
  node.name: elk-node-2                  #節點2的名字,起名大法
  path.data: /elk                                # elk的數據存放目錄
  path.logs: /elk/logs                         #elk的日誌存放目錄,必定要記住這個目錄,有啥錯誤看日誌,說明,不要一臉懵逼的撓頭,都TM撓成地中海了
  network.host: 192.168.2.132         #主機的地址啦,node2的IP地址是192.168.2.132
  http.port: 9200                               #默認端口9200 ,最後查看服務是否啓動成功,看端口啊,排查故障,看網絡,看端口
  discovery.zen.ping.unicast.hosts: ["192.168.2.130", "192.168.2.132"]       #這裏能夠寫成網段,可是廣播很耗費性能,原本內存就不大,直接就改爲組播,就這倆就行
  [root@linux-node02 ~]# vim /usr/lib/systemd/system/elasticsearch.service   #查看這個文件的時候你會看到這幾行,和MySQL相似,就是對文件的用戶和用戶組添加一下就ok,切忌不要改文件屬性爲777,你是傻子麼??????
  User=elasticsearch
  Group=elasticsearch
  [root@linux-node02 ~]#systemctl start elasticsearch  #啓動服務,開始咱們的遊戲

  [root@linux-node02 ~]#systemctl enable elasticsearch  #開機自啓動
  [root@linux-node02 ~]#vim /var/log/messages #查看一下日誌報什麼錯誤,有個權限拒絕相似的,就是說上面沒有對/elk文件沒有權限
  [root@linux-node02 ~]# chown -R elasticsearch.elasticsearch /elk/   #添加用戶和用戶組,-R :就是說對整個文件夾下面的內容都要這麼操做,也就是所謂的遞歸
  [root@linux-node02 ~]# ll /elk/   #如今整個文件夾下啥都沒有,啓動成功以後你就在這裏能看到日誌文件了,有錯誤找這裏,而後去百度找一找
  total 0
  [root@linux-node02 ~]# ll /elk/ -d
  drwxr-xr-x. 2 elasticsearch elasticsearch 6 Oct 16 20:25 /elk/
  #這裏有一個錯誤就是由於我內存給的1G,日誌顯示內存不足以支持配置,調大內存爲2G,從新啓動服務

  [root@linux-node02 ~]# ss -ntl
  State Recv-Q Send-Q Local Address:Port Peer Address:Port
  LISTEN 0 128 *:22 *:*
  LISTEN 0 100 127.0.0.1:25 *:*
  LISTEN 0 128 ::ffff:192.168.2.132:9200 :::*     
  LISTEN 0 128 ::ffff:192.168.2.132:9300 :::*     
  #systemctl stop firewalld 關閉防火牆啦,若是你在瀏覽器查看不到效果,看你防火牆關沒關

  測試:瀏覽器查看一下

      

node1修改
若是不想修改,能夠直接把2的文件拷到這邊,再稍微改動一下,主要針對節點名和主機地址
  [root@linux-node01 ~]# egrep -v "^#" /etc/elasticsearch/elasticsearch.yml
  cluster.name: elk-cluster1
  node.name: elk-node-1
  path.data: /elk
  path.logs: /elk/logs
  network.host: 192.168.2.130
  http.port: 9200
  discovery.zen.ping.unicast.hosts: ["192.168.2.130", "192.168.2.132"]
  [root@linux-node01 ~]# systemctl start elasticsearch
  [root@linux-node01 ~]# ll /elk/
  total 0
  drwxr-xr-x. 2 elasticsearch elasticsearch 158 Oct 16 22:03 logs
  drwxr-xr-x. 3 elasticsearch elasticsearch 15 Oct 16 22:03 nodes
  [root@linux-node01 ~]# ss -ntl
  State Recv-Q Send-Q Local Address:Port Peer Address:Port
  LISTEN 0 128 *:22 *:*
  LISTEN 0 100 127.0.0.1:25 *:*
  LISTEN 0 128 ::ffff:192.168.2.130:9200 :::*
  LISTEN 0 128 ::ffff:192.168.2.130:9300 :::*
第三步:安裝npm而後運行head插件測試一下
  #mkdir /usr/local/node
  #cd /usr/local/node
  #wget https://npm.taobao.org/mirrors/node/v4.4.7/node-v4.4.7-linux-x64.tar.gz
  #tar -zxvf node-v4.4.7-linux-x64.tar.gz
  #ln -s /usr/local/node/node-v4.4.7-linux-x64/bin/npm /usr/local/bin/npm
  #ln -s /usr/local/node/node-v4.4.7-linux-x64/bin/node /usr/local/bin/node
  #npm -v

  去網上找這個插件elasticsearch-head,找不到也能夠直接pass作下一步
  #cd /usr/local/src/elasticsearch-head #必須進入這個目錄才能夠,不然報錯    
  #npm run start &  執行以後查看端口會發現9100
   

  玩到這裏你會發現這個插件不能鏈接,去修改主配置文件/etc/elasticsearch/elasticsearch.yml,增長這兩行內容

  http.cors.enabled: true         
  http.cors.allow-origin: "*"

  

  成功鏈接到集羣  

   

   

   

    玩一玩,點一點,測試一下

 第四步:監控平臺健康值

[root@linux-node01 elasticsearch-head]# curl –sXGET http://192.168.2.132:9200/_cluster/health?pretty=true
curl: (6) Could not resolve host: xn--sxget-xu3b; Name or service not known
{
"cluster_name" : "elk-cluster1",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
"active_primary_shards" : 5,
"active_shards" : 10,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
經過這個命令能夠寫一個腳原本監控系統健康狀態

第五步:安裝logstash,這個是你要檢測的系統或服務器須要安裝,在node2安裝,node1不須要

#cd /usr/local/src/
# ls   #把logstash的rpm軟件包傳上去 
elasticsearch-head elasticsearch-head.tar.gz logstash-5.6.5.rpm
[root@linux-node02 src]# yum -y install logstash-5.6.5.rpm
#/usr/share/logstash/bin/logstash --help   #命令幫助信息
  -t, --config.test_and_exit Check configuration for valid syntax and then exit.  #測試配置文件格式是否正確
  -f, --path.config CONFIG_PATH  #指定文件
測試一下
#/usr/share/logstash/bin/logstash -e 'input { stdin{} } output { stdout{ codec => rubydebug }}'   #它的主要功能input和output兩個模塊,注意格式不要錯
The stdin plugin is now waiting for input:
123   #輸入123,輸出格式化標準信息,說明麼有問題,可使用
  {
  "@version" => "1",
  "host" => "linux-node02",
  "@timestamp" => 2019-10-17T02:32:14.783Z,
  "message" => "123"
  }
[root@linux-node02 conf.d]# /usr/share/logstash/bin/logstash -e 'input { stdin{} } output { file { path=> "/tmp/a.txt" }}'    #修改輸出模塊,直接輸出到一個目錄文件中,
[root@linux-node02 ~]# tail /tmp/a.txt
{"@version":"1","host":"linux-node02","@timestamp":"2019-10-17T02:37:52.832Z","message":"dffd"}
{"@version":"1","host":"linux-node02","@timestamp":"2019-10-17T02:37:54.464Z","message":"123"}
{"@version":"1","host":"linunode02","@timestamp":"2019-10-17T02:37:55.717Z","message":"fdfdf"}
測試配置文件書寫格式是否正確,若是錯誤會有提示
[root@linux-node02 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/systemlog.conf -t   #利用上面的格式,咱們來寫一個將系統日誌的內容輸出到一個測試文件中,-t測試文件格式
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 errors to the console
Configuration OK
文件內容 /etc/logstash/conf.d/systemlog.conf
input{
  file{
    path => "/var/log/messages"
    start_position => "beginning"
    type => "systemlog-132"
  stat_interval => "2"
  }
}
output{
  elasticsearch {
    hosts => ["192.168.2.11:9200"]
    index => "logstash-system-log-132-%{+YYYY.MM.dd}"     #基礎啦,這個要是看不懂,就去看書去吧,意思是按照年月日的格式來輸出
  }
  file{
    path => "/tmp/logstash.txt"
  }
}          #注意大括號是成雙成對的

啓動的時候發現個人systemctl start lsgstash  很差使,百度一下,以下步驟解決,
  [root@linux-node02 conf.d]# /usr/share/logstash/bin/system-install /etc/logstash/startup.options systemd
  Using provided startup.options file: /etc/logstash/startup.options
  Manually creating startup for specified platform: systemd
  Successfully created system startup script for Logstash
  [root@linux-node02 conf.d]# systemctl start logstash
  #cat /var/log/logstash/logstash-plain.log   #看日誌最後一行的Successfully   你懂的啦
  [2019-10-17T11:14:48,947][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
正常的話會看到兩個java程序 ,

作到這裏發現/tmp目錄下沒有咱們剛纔輸出的那個文件,查了一下,是由於日誌文件對其餘人沒有權限,改一下吧,644
#chmod 644 /var/log/messages
#tail /tmp/logstash.txt   能夠看到日誌輸出到了這裏,恭喜你,作到這裏,還有一步就能最後看到WEB管理界面了
第六步:kibana安裝,node1節點安裝

[root@linux-node01 ~]# ls     #老套路,把rpm包上傳到這裏,而後yum install -y kibana-5.6.5-x86_64.rpm  安裝就行了
elasticsearch-5.6.5.rpm kibana-5.6.5-x86_64.rpm

[root@linux-node01 ~]# egrep -v "^#|^$" /etc/kibana/kibana.yml     #修改一下配置文件
  server.port: 5601                                                #默認服務端口
  server.host: "192.168.2.130"                              #服務主機的地址,咱們這裏寫本身的IP地址
  elasticsearch.url: "http://192.168.2.132:9200"   #要收集日誌的目的地,elasticsearch的url和端口

啓動服務

[root@linux-node01 ~]# systemctl start kibana

測試

[root@linux-node01 ~]# ss -nlt    

State Recv-Q Send-Q Local Address:Port Peer Address:Port
  LISTEN 0 128 *:9100 *:*                                    #9100是head插件的端口
  LISTEN 0 128 *:22 *:*
  LISTEN 0 100 127.0.0.1:25 *:*
  LISTEN 0 128 192.168.2.130:5601 *:*              #5601是kibana默認的端口
  LISTEN 0 128 ::ffff:192.168.2.130:9200 :::*      #9200和9300是elasticsearch默認的端口
  LISTEN 0 128 ::ffff:192.168.2.130:9300 :::*
  LISTEN 0 128 :::22 :::*
  LISTEN 0 100 ::1:25 :::*

有了端口,就去瀏覽器看一下

[root@linux-node02 ~]# ss -nlt     #看一下node2 的端口信息,

State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 ::ffff:192.168.2.132:9200 :::*
LISTEN 0 128 ::ffff:192.168.2.132:9300 :::*
LISTEN 0 128 :::22 :::*
LISTEN 0 100 ::1:25 :::*
LISTEN 0 50 ::ffff:127.0.0.1:9600 :::*   #9600是logstash默認的端口,沒有這幾個端口就說明你的服務沒有開啓

剛開始是沒有信息的,須要咱們添加一個索引模式,就按照咱們剛纔系統日誌測試的來,注意要選擇間隔,看你是天天仍是每小時,能夠本身調試

[logstash-system-log-132]-YYYY.MM.DD
若是發現頁面時間不同,配置ntp服務器,時間必定要全網同步,否則。。。。。

 作到這裏,咱們的ELK三件套就算所有按照完成了,暫時功德圓滿,還有不少能夠玩,添加logstash的配置文件,測試Apache或者nginx,你想咋玩就咋玩,記住這是一個日誌審計平臺

Apache服務日誌
編輯配置/etc/logstash/conf.d/apache_log.conf

input { file {path => "/etc/httpd/logs/access_log" type => "access" start_position => "beginning"}

file { path => "/etc/httpd/logs/error_log" type => "error" start_position => "beginning" } }

output { if [type] == "access" { elasticsearch { hosts => ["10.0.0.133:9200"] index => "apache_access-%{+YYYY.MM.dd}" } }

if [type] == "error" { elasticsearch { hosts => ["10.0.0.133:9200"] index => "apache_error-%{+YYYY.MM.dd}" } } }

 GAME OVER !!!!!!  碼字不易,各位看官加個關注吧,秒回關的那種

相關文章
相關標籤/搜索