# ELK日誌蒐集平臺解決方案
---
---
---
1. 硬件設備
2. 系統環境
3. elasticsearch 集羣部署
4. kibana 部署
5. logstash 部署
6. filebeat 部署
7. 平臺邊界
8. 資料蒐集html
## 硬件設備
```
1. cpu: Intel(R) Pentium(R) CPU G3220 @ 3.00GHz 雙核
2. memory: 8G
```
## 系統環境
```
1. centos 7
2. java8
```
### 系統環境準備(elasticsearch對系統資源要求)
1. 修改進程所須要內存區域
elasticsearch 5以上版本須要至少262144
```
sysctl -w vm.max_map_count=262144
```
2. 修改指定用戶打開文件限制(elasticsearch對系統資源要求)java
```
sudo vim /etc/security/limits.conf
redhat hard nofile 65536
redhat soft nofile 65536
- redhat 用戶名
- soft 指的是當前系統生效的設置值
- hard 代表系統中所能設定的最大值
- soft 的限制不能比har 限制高
- nofile 打開文件數目
```
## elasticsearch集羣部署node
### 所需機器linux
```
node95: root 192.168.100.95 123456 (默認先啓動爲master節點)
node96: root 192.168.100.96 123456
node97: root 192.168.100.97 123456 bootstrap
```
### 安裝包下載
1. 地址:<https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.tar.gz>
2. 使用壓縮包安裝啓動
### 修改配置文件(elasticsearch.yml)
1. cluster.name ---> 指定集羣名字,集羣中全部節點集羣名字必須相同。
2. node.name ---> 節點名字
3. network.host ---> 綁定的ip地址,該ip地址必須是本機器存在ip地址。
4. http.port ---> HTTP協議端口
5. transport.tcp.port 節點間交互的tcp端口
6. discovery.zen.ping.unicast.hosts ---> 用於發現其餘節點
7. discovery.zen.minimum_master_nodes ---> 用於最小master節點數 計算方法:節點總數/2+1
8. bootstrap.memory_lock ---> 是否鎖定內存(boolean)
9. path.logs ---> 日誌位置
10. path.data ---> 數據位置
11. 其它配置 ---> <http://www.cnblogs.com/hanyouchun/p/5163183.html>
### 本次部署配置
```
cluster.name: juxinli-test
node.name: node95
network.host: 192.168.100.95
discovery.zen.ping.unicast.hosts: ["192.168.100.95:9300","192.168.100.96:9300","192.168.100.97:9300"]
discovery.zen.minimum_master_nodes: 2
```
### jvm虛擬機設置(jvm.options)
```
-Xms2g ---> default
-Xmx2g ---> default
```
### 啓動命令
```
1. ./bin/elasticsearch
2. ./bin/elasticsearch -d 後臺啓動
3. 不能用root用戶啓動
```
### 查詢API
#### 節點信息查詢vim
##### path:[_nodes] 主要用於驗證節點是否已經啓動開來centos
文檔地址: <https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster.html>
測試地址: <http://192.168.100.95:9200/_nodes>
#### 其它見API Document
<https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-get.html>
## kibana 部署
### 下載地址
<https://artifacts.elastic.co/downloads/kibana/kibana-5.2.2-linux-x86_64.tar.gz>
### 文件配置(kibana.yml)app
```
1. server.port ---> 端口
2. server.hos ---> 地址
3. elasticsearch.url ---> elasticsearch 地址
```
### 啓動
```
./bin/kibana
```
## logstash 部署
### 下載地址
<https://artifacts.elastic.co/downloads/logstash/logstash-5.2.2.tar.gz>
### 配置文件(logstash.conf)
輸入,輸出,過濾詳細狀況見文檔:
<https://www.elastic.co/guide/en/logstash/current/configuration.html>
### 啓動
```
./bin/logstash -f ./config/logstash.conf
```
## filebeat部署
### 下載地址
<https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.2.2-linux-x86_64.tar.gz>
### 配置文件(filebeat.yml)
```
- input_type: log
paths:
- ./root/CrawLog
output.logstash:
hosts: ["192.168.100.96:5044"]
```
### 啓動
```
sudo ./filebeat -e -c filebeat.yml
```
## 平臺邊界
### 日誌輸入規範
```
1. 輸出文件路徑: /root/CrawLog
2. 文件名: ${機構ID_訂單ID_任務ID}_Log.%d{yyyy-MM-dd-HH}.log
3. 日誌格式: %date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n
```
### logstash 輸入,過濾,輸出 規範
```
input {
beats {
port => 5044
}
}jvm
filter {
grok {
match => {
"source" => "/var/log/juxinli/(?<institutionId>[a-zA-Z0-9]*)_(?<indentId>[a-zA-Z0-9]*)_(?<taskId>[a-zA-Z0-9]*)"
}
}
}elasticsearch
output {
elasticsearch {
hosts => ["192.168.100.95:9200","192.168.100.96:9200","192.168.100.97:9200"]
manage_template => false
index => "%{taskId}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
說明:
1. 輸入HTTP端口 5044
2. 經過任務ID建立索引
3. 從路徑中提取任務ID,機構ID,訂單ID加入屬性方便查詢。
4. 過濾經過正則
```
### 查詢層規範
```
1. 能夠很直觀經過kibana查詢
2. 查詢接口能夠經過閱讀elasticsearch的官方文檔
3. 查詢接口也能夠經過分析kibana查詢的http請求
```
## 資料蒐集
1. 配置索引模版 - <http://blog.csdn.net/asia_kobe/article/details/51192848>2. grok 在線正則地址 - <http://grokdebug.herokuapp.com/