The Road of DBA 20_NoSQL_ELK---(1)

1、elasticsearch回顧


1.什么叫搜索

2.為什么mysql不適合全文搜素

3.什么是全文搜索lucene

4.es的應用場景

5.es的特點

6.es的安裝部署
- java環境
- 內存不能小于2G
- 磁盤空間給足
- 配置文件開啟內存鎖定
- jvm虛擬機最大最小內存都一樣
- 綁定了內網IP和本地IP

7.解決內存鎖定
- 配置文件增加允許內存鎖定參數
- 重啟es

8.測試
- ps -ef|grep elasticsearch
- ss -lntup|grep 9200

9.開放防火墻端口
- 9200
- 9300 通訊端口

10.安裝es-head插件
- 安裝包npm
- chrome瀏覽器插件

11.概念
- index 庫
- type  表
- doc   行數據
- fields  字段
- shards  分片 分庫 分表

12.操作命令CRUD
- put
- get
- post
- delete

13.集群配置
cluster.name: linux58               #集群模式,必須打開,同一個集群要全部一樣
node.name: node-1                   #節點名稱,每個節點都不一樣
path.data: /data/elasticsearch      #如果你更換了目錄,要授權給es用戶和組
path.logs: /var/log/elasticsearch   #如果是集群模式,日志名為{集群名.log}
bootstrap.memory_lock: true         #內存鎖定,一定要打開,然后修改system配置
network.host: 10.0.0.51,127.0.0.1   #綁定內網IP,本地IP可以選擇不做
http.port: 9200                     #默認9200,還有一個隱藏的通訊端口,9300
discovery.zen.ping.unicast.hosts: ["10.0.0.51", "10.0.0.52"]    #集群發現地址,只要包含自己和集群內任意一個節點就可以。
discovery.zen.minimum_master_nodes: 1   #選舉相關參數,多數節點數量node/2 + 1
http.cors.enabled: true                 #為了讓es-head可以訪問es,同下
http.cors.allow-origin: "*"             #為了讓es-head可以訪問es,同上

14.介紹集群的相關重要信息
- 分片數和副本數
- 默認創建為5分片,1副本
- 分片一旦創建好就不能改變了
- 副本數可以隨時動態調整
- 集群健康狀態
-- red     #有數據不完整
--yellow      #數據都完整,但是有索引的副本或分片狀態不正常
--green       #數據都完整,副本也符合條件
-監控節點數量

15.模擬故障現象
- 停掉服務器,觀察集群狀態
- 要注意,不能短時間內連續壞多臺
- 要注意,不能短時間關閉重啟多個回合
- 如果是0副本,數據所在的哪臺機器,不能壞掉,不能數據丟失

16.Kibana管理es集群
- 打開監控功能
- DevTools可以方便執行命令

17.中文分詞器
- 所有es節點都安裝
- 所有es節點安裝完成后要重啟才能生效
- 先創建索引
- 在創建映射關系(類似于mysql建表語句)
- 然后指定使用中文分詞器
- 搜素測試

ELK功能圖

image

ELK架構圖

image

1、ELK日志收集


E: Elasticsearch
F: Filebeat
L: Logstash
K: kibana

2、常規分析日志的操作

2.1、分析需求:


1.找出訪問網站頻次最高的IP排名前十
2.找出訪問網站排名前十的URL
3.找出中午10點到2點之間www網站訪問頻次最高的IP
4\. 對比昨天這個時間段和今天這個時間段訪問頻次有什么變化
5.對比上周這個時間和今天這個時間的區別
6.找出特定的頁面被訪問了多少次
7.找出有問題的IP地址,并告訴我這個IP地址都訪問了什么頁面,在對比前幾天他來過嗎?他從什么時間段開始訪問的,什么時間段走了
8.找出來訪問最慢的前十個頁面并統計平均響應時間,對比昨天這也頁面訪問也這么慢嗎?
9.找出搜索引擎今天各抓取了多少次?抓取了哪些頁面?響應時間如何?
10.找出偽造成搜索引擎的IP地址
11.5分鐘之內告訴我結果

2.2、需要收集哪些日志


系統層面: message   secure

代理層:nginx   haproxy    lvs

web層:nginx   tomcat   php  apache

數據庫層:mysql   redis   mongo   elasticsearch

3、收集nginx日志

3.1、還原環境,方便查詢日志


systemctl stop elasticsearch
systemctl stop kibana
rm -rf /var/lib/kibana/*
rm -rf /data/elasticsearch/*
systemctl start elasticsearch
systemctl start kibana

3.1、收集nginx日志

1.安裝啟動nginx
yum install ntpdate -y                                   同步阿里云時間
ntpdate time1.aliyun.com
yum install nginx -y
systemctl start nginx

2.安裝filebeat
1)上傳壓縮包
2)安裝
 yum install filebeat-6.6.0-x86_64.rpm
注意###filebeat所有節點都需要安裝
3.修改配置文件
vim /etc/filebeat/filebeat.yml 

filebeat.inputs:
- type: log
  enabled: false
  paths:
    - /var/log/nginx/access.log
output.elasticsearch:
  hosts: ["10.0.0.51:9200"]

4.啟動filebeat
systemctl start filebeat.service 
systemctl enable filebeat.service 

image
image

3.2、filebeat原理:


1.類似于tail -f
2.30秒檢測一下日志有沒有發生變化

3.3、停掉filebeat在啟動中間數據如何處理


1\. 直接從最后開始讀取的話數據就會丟失
2\. 從頭開始讀取數據就會重復收集
3\. 從斷開的地方開始讀取

3.4、不完善的地方


不能單獨統計展示訪問網站的某項內容

3.5、nginx日志格式


我們期望的格式
$remote_addr:10.0.0.1 
$remote_user:-
[$time_local]:[10/Jul/2019:17:59:52 +0800]
$request:GET/db01.html HTTP/1.1"
$status :404
$body_bytes_sent:3650
$http_referer:-
$http_user_agent:Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36
$http_x_forwarded_for:-

操作步驟:注意!所有nginx服務器都需要操作!
1.修改nginx配置文件
log_format  json  '{ "time_local": "$time_local", '
                       '"remote_addr": "$remote_addr", '
                       '"referer": "$http_referer", '
                       '"request": "$request", '
                       '"status": $status, '
                       '"bytes": $body_bytes_sent, '
                       '"agent": "$http_user_agent", '
                       '"x_forwarded": "$http_x_forwarded_for", '
                       '"up_addr": "$upstream_addr",'
                       '"up_host": "$upstream_http_host",'
                       '"upstream_time": "$upstream_response_time",'
                       '"request_time": "$request_time"'
' }';
access_log  /var/log/nginx/access.log  json;

2.重啟nginx
nginx -t
systemctl reload nginx

3.重新訪問nginx產生新數據
curl 10.0.0.51

4.修改后的日志格式
{
    "time_local": "10/Jul/2019:18:55:59 +0800",
    "remote_addr": "10.0.0.1",
    "referer": "-",
    "request": "GET /db01.html HTTP/1.1",
    "status": 404,
    "bytes": 3650,
    "agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
    "x_forwarded": "-",
    "up_addr": "-",
    "up_host": "-",
    "upstream_time": "-",
    "request_time": "0.000"
}

5.清空nginx日志
> /var/log/nginx/access.log

6.修改filebeat配置文件
filebeat.inputs:
- type: log
  enabled: true 
  paths:
    - /var/log/nginx/access.log
  json.keys_under_root: true
  json.overwrite_keys: true
output.elasticsearch:
  hosts: ["10.0.0.51:9200"]

7.es刪除舊的索引

8.重啟filebeat
systemctl restart filebeat

image
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。