ELK YUM 安裝部署添加監控

簡介
ELK 官網:

https://www.elastic.co/cn/what-is/elk-stack

ElasticSearch
ElasticSearch 是一個高可用開源全文檢索和分析組件。提供存儲服務,搜索服務,大數據準實時分析等。一般用於提供一些提供複雜搜索的應用

基本概念:

Index
定義:類似於mysql中的database。索引只是一個邏輯上的空間,物理上是分爲多個文件來管理的。
命名:必須全小寫
描述:在實踐過程中每個index都會有一個相應的副 本。主要用來在硬件出現問題時,用來回滾數據的。這也某種程序上,加劇了ES對於內存高要求。

Type
定義:類似於mysql中的table,根據用戶需求每個index中可以新建任意數量的type。

Document
定義:對應mysql中的row。有點類似於MongoDB中的文檔結構,每個Document是一個json格式的文本

Mapping
更像是一個用來定義每個字段類型的語義規範。在mysql中類似sql語句,在ES中經過包裝後,都被封裝爲友好的Restful風格的接口進行操作。

這一點也是爲什麼開發人員更願意使用ES的原因。

Shards & Replicas
定義:能夠爲每個索引提供水平的擴展以及備份操作。保證了數據的完整性和安全性
描述:
Shards:在單個節點中,index的存儲始終是有限制,並且隨着存儲的增大會帶來性能的問題。爲了解決這個問題,ElasticSearch提供一個能夠分割單個index到集羣各個節點的功能。你可以在新建這個索引時,手動的定義每個索引分片的數量。
Replicas:在每個node出現宕機或者下線的情況,Replicas能夠在該節點下線的同時將副本同時自動分配到其他仍然可用的節點。而且在提供搜索的同時,允許進行擴展節點的數量,在這個期間並不會出現服務終止的情況。
默認情況下,每個索引會分配5個分片,並且對應5個分片副本,同時會出現一個完整的副本【包括5個分配的副本數據】。

安裝步驟
關閉防火牆,關閉selinux
systemctl stop firewalld
setenforce 0

系統優化:

[root@node1 ~]# cat  /etc/security/limits.conf |tail -n 15
*       soft    nproc       65535
*       soft    nofile      65535
*       hard    nproc       65535
*       hard    nofile      65535<br><br>vi /etc/sysctl.conf  加一行<br>vm.max_map_coun=655360
[root@localhost src]# ls
elasticsearch-6.6.2.rpm  jdk-8u131-linux-x64_.rpm  kibana-6.6.2-x86_64.rpm  logstash-6.6.0.rpm

132:elasticsearch
133:logstash+kibana
1 安裝jdk
132端:

[root@localhost src]# rpm -ivh jdk-8u131-linux-x64_.rpm 
準備中...                          ################################# [100%]
正在升級/安裝...
   1:jdk1.8.0_131-2000:1.8.0_131-fcs  ################################# [100%]
Unpacking JAR files...
	tools.jar...
	plugin.jar...
	javaws.jar...
	deploy.jar...
	rt.jar...
	jsse.jar...
	charsets.jar...
	localedata.jar...
[root@localhost src]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

133端:

[root@localhost src]# rpm -ivh jdk-8u131-linux-x64_.rpm 
準備中...                          ################################# [100%]
正在升級/安裝...
   1:jdk1.8.0_131-2000:1.8.0_131-fcs  ################################# [100%]
Unpacking JAR files...
	tools.jar...
	plugin.jar...
	javaws.jar...
	deploy.jar...
	rt.jar...
	jsse.jar...
	charsets.jar...
	localedata.jar...
[root@localhost src]# java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)

2,安裝elasticsearch
yum -y install elasticsearch-6.6.2.rpm
配置開機自啓動

[root@localhost src]# systemctl enable elasticsearch.service

開啓服務elasticsearch

[root@localhost src]# systemctl start elasticsearch.service

驗證服務是否啓動

[root@localhost src]# netstat -nlpt | grep java
tcp6       0      0 127.0.0.1:9200          :::*                    LISTEN      19600/java          
tcp6       0      0 ::1:9200                :::*                    LISTEN      19600/java          
tcp6       0      0 127.0.0.1:9300          :::*                    LISTEN      19600/java          
tcp6       0      0 ::1:9300                :::*                    LISTEN      19600/java  

監聽端口:
9200作爲Http協議,主要用於外部通訊
9300作爲Tcp協議,ES集羣之間是通過9300進行通訊
配置elasticsearch

[root@localhost src]# cat /etc/elasticsearch/elasticsearch.yml | grep -v '^#'
cluster.name: wg007
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 192.168.116.132
http.port: 9200

elasticsearch日誌文件路徑:

[root@localhost src]# cd /var/log/elasticsearch/
[root@localhost elasticsearch]# ll
總用量 88
-rw-r--r--. 1 elasticsearch elasticsearch     0 4月  26 19:00 elasticsearch_access.log
-rw-r--r--. 1 elasticsearch elasticsearch     0 4月  26 19:00 elasticsearch_audit.log
-rw-r--r--. 1 elasticsearch elasticsearch     0 4月  26 19:00 elasticsearch_deprecation.log
-rw-r--r--. 1 elasticsearch elasticsearch     0 4月  26 19:00 elasticsearch_index_indexing_slowlog.log
-rw-r--r--. 1 elasticsearch elasticsearch     0 4月  26 19:00 elasticsearch_index_search_slowlog.log
-rw-r--r--. 1 elasticsearch elasticsearch  8308 4月  26 19:00 elasticsearch.log
-rw-r--r--. 1 elasticsearch elasticsearch 75639 4月  26 19:04 gc.log.0.current

elasticsearch 配置詳解:

cluster部分:==========
cluster.name: elasticsearch
配置es的集羣名稱,默認是elasticsearch,es會自動發現在同一網段下的es,
如果在同一網段下有多個集羣,就可以用這個屬性來區分不同的集羣。
 
node部分:===========
node.name: node-1
定義節點名稱
node.attr.rack: r1
向節點添加自定義屬性
 
Paths部分:==========
path.data: /var/lib/elasticsearch
設置索引數據的存儲路徑
path.logs: /var/log/elasticsearch
設置日誌文件的存儲路徑
 
Memory部分:=======
bootstrap.memory_lock: true
啓動時鎖定內存,爲了保證es正常運行
 
Network部分:========
network.host: 192.168.0.1
設置綁定的ip地址,可以是ipv4或ipv6的
http.port: 9200
設置對外服務的http端口,默認爲9200。
 
Discovery部分:=======
 
discovery.zen.ping.unicast.hosts: ["host1", "host2"]
設置集羣中master節點的初始列表,可以通過這些節點來自動發現新加入集羣的節點
discovery.zen.minimum_master_nodes:
設置這個參數來保證集羣中的節點可以知道其它N個有master資格的節點。
默認爲1,對於大的集羣來說,可以設置大一點的值(2-4)
 
Gateway部分:========
gateway.recover_after_nodes: 3
設置集羣中N個節點啓動時進行數據恢復,默認爲1
 
Various部分: [ˈveriəs]=======各種各樣====
action.destructive_requires_name: true
刪除索引時需要顯式名稱

常用命令:

驗證服務
curl -X GET http://127.0.0.1:9200
elasticsearch 查看集羣統計信息
curl -XGET ‘http://localhost:9200/_cluster/stats?pretty’
查看集羣狀態
curl -X GET ‘localhost:9200/_cat/health?v’
創建索引:test_index
curl -X PUT HTTP://localhost:9200/test_index?pretty
elasticsearch 查看所有索引
curl -X GET HTTP://localhost:9200/_cat/indices?v
curl -s http://192.168.1.9:9200/_cat/indices|grep “msg”|awk ‘{print $3}’|sort
刪除索引:test_index
curl -XDELETE ‘localhost:9200/test_index?pretty’

logstash工作原理:
Logstash事件處理有三個階段:inputs → filters → outputs。是一個接收,處理,轉發日誌的工具。
支持系統日誌,webserver日誌,錯誤日誌,應用日誌,總之包括所有可以拋出來的日誌類型。
Input模塊:輸入數據到logstash。
一些常用的輸入爲:
file:從文件系統的文件中讀取,類似於tail-f命令
redis:從redis service中讀取
beats:從filebeat中讀取
kafka:從kafka隊列中讀取
Filters:數據中間處理,對數據進行操作。

一些常用的過濾器爲:
grok:解析任意文本數據,Grok 是 Logstash 最重要的插件。
它的主要作用就是將文本格式的字符串,轉換成爲具體的結構化的數據,配合正則表達式使用。內置120多個解析語法。
官方提供的grok表達式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
grok在線調試:https://grokdebug.herokuapp.com/
mutate [ˈmjuːteɪt]:對字段進行轉換。
例如對字段進行刪除、替換、修改、重命名等。
drop:丟棄一部分events不進行處理。
clone:拷貝 event,這個過程中也可以添加或移除字段。
geoip:添加地理信息(爲前臺kibana圖形化展示使用)
Outputs模塊:outputs是logstash處理管道的最末端組件。
一個event可以在處理過程中經過多重輸出,但是一旦所有的outputs都執行結束,這個event也就完成生命週期。

一些常見的outputs爲:
elasticsearch:可以高效的保存數據,並且能夠方便和簡單的進行查詢。
file:將event數據保存到文件中。
graphite [ˈɡræfaɪt]:將event數據發送到圖形化組件中,一個很流行的開源存儲圖形化展示的組件。
Codecs模塊:codecs 是基於數據流的過濾器,它可以作爲input,output的一部分配置。Codecs可以幫助你輕鬆的分割發送過來已經被序列化的數據。

一些常見的codecs:
json:使用json格式對數據進行編碼/解碼。
multiline:將匯多個事件中數據彙總爲一個單一的行。比如:java異常信息和堆棧信息。

133安裝logstash:
yum -y install logstash-6.6.0.rpm
配置文件路徑:

[root@localhost src]# cd /etc/logstash/
[root@localhost logstash]# ll
總用量 36
drwxrwxr-x. 2 root root    6 1月  24 2019 conf.d
-rw-r--r--. 1 root root 1846 1月  24 2019 jvm.options
-rw-r--r--. 1 root root 4568 1月  24 2019 log4j2.properties
-rw-r--r--. 1 root root  342 1月  24 2019 logstash-sample.conf
-rw-r--r--. 1 root root 8194 4月  26 19:13 logstash.yml
-rw-r--r--. 1 root root  285 1月  24 2019 pipelines.yml
-rw-------. 1 root root 1696 1月  24 2019 startup.options

日誌文件路徑:

[root@localhost logstash]# cd /var/log/logstash/

logstash是用來收集日誌,並對日誌做過濾處理的,我們下面要分析的是系統日誌,所以要編寫一個收集日誌的配置文件

[root@localhost logstash]# cd /etc/logstash/conf.d/
[root@localhost conf.d]# vim messages.conf
[root@localhost conf.d]# cat messages.conf 
input {
	file {
		path => "/var/log/messages"
		type => "messages-log"
		start_position => "beginning"
	}
}

output {
	elasticsearch {
		hosts => "192.168.116.132:9200"
		index => "messages_log-%{+YYYY.MM.dd}"		
	}
}
[root@localhost conf.d]# cat nginxlog.conf 
input {
        file {
                path => "/usr/local/nginx/logs/access.log"
                type => "nginx-log"
                start_position => "beginning"
        }
}

output {
        elasticsearch {
                hosts => "192.168.116.132:9200"
                index => "nginx_log-%{+YYYY.MM.dd}"
        }
}

這裏爲了測試,將/var/log/messages日誌的權限修改爲了677
chmod -R 777 /var/log/messages

如果conf.d 下有多個配置文件需要修改pipelines.yml(管道)文件

[root@localhost conf.d]# cd ..
[root@localhost logstash]# vim pipelines.yml
- pipeline.id: messages
  path.config: "/etc/logstash/conf.d/messages.conf"
- pipeline.id: nginxlog
  path.config: "/etc/logstash/conf.d/nginxlog.conf"

logstash啓動開機自啓

[root@localhost logstash]# systemctl start logstash.service
[root@localhost logstash]# systemctl enable logstash.service
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service.

[root@localhost logstash]# netstat -nlpt | grep java
tcp6       0      0 127.0.0.1:9600          :::*                    LISTEN      27775/java 

安裝kibana
yum -y install kibana-6.6.2-x86_64.rpm

配置kibana
這裏只需要配置監聽地址和elasticsearch的ip就可以了
vim /etc/kibana/kibana.yml

[root@localhost src]# cat /etc/kibana/kibana.yml | grep -v "^#"
server.port: 5601
server.host: "192.168.116.133"
elasticsearch.hosts: ["http://192.168.116.132:9200"]

啓動服務

[root@localhost src]# systemctl start kibana
[root@localhost src]# netstat -nlpt | grep 5601
tcp        0      0 192.168.116.133:5601    0.0.0.0:*               LISTEN      29231/node 

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章