ELK部署:
介紹:
ELK是Elasticsearch + Logstash + Kibana 這種架構(gòu)的簡寫。這是一種日志分平臺析的架構(gòu)。從前我們用shell三劍客(grep, sed, awk)來分析日志, 雖然也能對付大多數(shù)場景,但當日志量大,分析頻繁,并且使用者可能不會shell三劍客的情況下, 配置方便,使用簡單,并且分析結(jié)果更加直觀的工具(平臺)就誕生了,它就是ELK。 ELK是開源的,并且社區(qū)活躍,用戶眾多
架構(gòu)說明:
1、 Elasticsearch + Logstash + Kibana
這是一種最簡單的架構(gòu)。這種架構(gòu),通過logstash收集日志,Elasticsearch分析日志,然后在Kibana(web界面)中展示。這種架構(gòu)雖然是官網(wǎng)介紹里的方式,但是往往在生產(chǎn)中很少使用。
2 、Elasticsearch + Logstash + filebeat + Kibana
與上一種架構(gòu)相比,這種架構(gòu)增加了一個filebeat模塊。filebeat是一個輕量的日志收集代理,用來部署在客戶端,優(yōu)勢是消耗非常少的資源(較logstash), 所以生產(chǎn)中,往往會采取這種架構(gòu)方式,但是這種架構(gòu)有一個缺點,當logstash出現(xiàn)故障, 會造成日志的丟失。
3、 Elasticsearch + Logstash + filebeat + redis(也可以是其他中間件,比如kafka) + Kibana
這種架構(gòu)是上面那個架構(gòu)的完善版,通過增加中間件,來避免數(shù)據(jù)的丟失。當Logstash出現(xiàn)故障,日志還是存在中間件中,當Logstash再次啟動,則會讀取中間件中積壓的日志。目前我司使用的就是這種架構(gòu),我個人也比較推薦這種方式。

 

步驟:

一、安裝jdk環(huán)境 (elasticsearch、logstash服務(wù)都需要jdk環(huán)境)

jdk介紹:
a、JDK (Java Development Kit) 是 Java 語言的軟件開發(fā)工具包(SDK)。在JDK的安裝目錄下有一個jre目錄,里面有兩個文件夾bin和lib,在這里可以認為bin里的就是jvm,lib中則是jvm工作所需要的類庫,而jvm和 lib合起來就稱為jre。
b、JRE(Java Runtime Environment,Java運行環(huán)境),包含JVM標準實現(xiàn)及Java核心類庫。JRE是Java運行環(huán)境,并不是一個開發(fā)環(huán)境,所以沒有包含任何開發(fā)工具(如編譯器和調(diào)試器)
c、JVM 是Java Virtual Machine(Java虛擬機)的縮寫,JVM是一種用于計算設(shè)備的規(guī)范,它是一個虛構(gòu)出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現(xiàn)的。

1. 下載JDK
JDK官網(wǎng)下載地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
請根據(jù)自己服務(wù)器情況下載對應(yīng)版本,linux是下載tar.gz結(jié)尾的包

2. 上傳linux服務(wù)器
把JDK包上傳服務(wù)器有多種方法,我是用Xshell自帶的ftp功能上傳服務(wù)器,比較簡單,這邊不多講。
上傳完成后,解壓到/usr/local/

tar xf jdk-8u191-linux-x64.tar.gz -C /usr/local/
#在/usr/local/下會生成一個jdk的目錄

3.設(shè)置環(huán)境變量
在/etc/profile配置文件中,在底部添加如下配置

vim /etc/profile

#set java environment
JAVA_HOME=/usr/local/jdk1.8
CLASSPATH=.:$JAVA_HOME/lib.tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH

[root@localhost ~]# source /etc/profile
#加載新聲明的環(huán)境變量

  

4.查看版本:

[root@localhost ~]# java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

#獲取以上信息,表示安裝完成

 

二、安裝redis


介紹:
REmote DIctionary Server(Redis) 是一個由Salvatore Sanfilippo寫的key-value存儲系統(tǒng)。

Redis是一個開源的使用ANSI C語言編寫、遵守BSD協(xié)議、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。

它通常被稱為數(shù)據(jù)結(jié)構(gòu)服務(wù)器,因為值(value)可以是字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等類型
安裝步驟:
1、安裝環(huán)境,下載,解壓,編譯
2、修改配置
3、啟動,登錄

安裝環(huán)境、下載、解壓、編譯
# 下載

wget http://download.redis.io/redis-stable.tar.gz
yum -y install gcc
tar xf redis-stable.tar.gz -C /usr/local/
cd /usr/local/redis-stable

# 編譯安裝

make && make install 

修改配置:

cd /usr/local/redis-stable
vim redis.conf
# 表示只可以本機訪問,要是遠程訪問需要注釋掉(前面加#號)
bind 127.0.0.1 
# 改為no 可以不用輸入密碼登陸
protected-mode yes 
# 修改端口
port 6379	
# 改為 yes 后臺運行
daemonize no 
# 連接密碼修改,foobared密碼
requirepass foobared

啟動登錄:

cd /usr/local/redis-stable
# 啟動
./src/redis-server ./redis.conf
# 關(guān)閉
./src/redis-cli -p 6379 shutdown
# 登錄
./src/redis-cli -h 127.0.0.1 -p 6379 


三、安裝elasticsearch


介紹
Elasticsearch 是一個分布式可擴展的實時搜索和分析引擎,一個建立在全文搜索引擎 Apache Lucene(TM) 基礎(chǔ)上的搜索引擎.當然 Elasticsearch 并不僅僅是 Lucene 那么簡單,它不僅包括了全文搜索功能,還可以進行以下工作:

1.分布式實時文件存儲,并將每一個字段都編入索引,使其可以被搜索。
2.實時分析的分布式搜索引擎。
3.可以擴展到上百臺服務(wù)器,處理PB級別的結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)。

安裝步驟
1.下載,解壓
2.修改linux內(nèi)核,設(shè)置資源參數(shù)
3.修改配置
4.啟動elasticsearch、自啟動腳本
5.安裝中文分詞

下載,解壓
# 下載

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.1.tar.gz
cd /data
tar xf elasticsearch-6.6.1.tar.gz

# 創(chuàng)建用戶,需要以普通用戶啟動

useradd elk

# 創(chuàng)建目錄,用于存放數(shù)據(jù)和日志

cd /data/elasticsearch-6.6.1
mkdir data logs  

修改linux內(nèi)核,設(shè)置資源參數(shù)

vim /etc/sysctl.conf 
# 增加
vm.max_map_count=655360  

# 執(zhí)行以下命令,確保生效配置生效:

sysctl -p

設(shè)置資源參數(shù)

vim /etc/security/limits.conf 
# 修改 
* soft nofile 65536 
* hard nofile 131072 
* soft nproc 65536 
* hard nproc 131072

# 設(shè)置用戶資源參數(shù)

vim /etc/security/limits.d/20-nproc.conf 
# 設(shè)置elk用戶參數(shù)
elk soft nproc 65536

修改配置

cd /data/elasticsearch-6.6.1

vim config/elasticsearch.yml	
#修改,取消以下配置注釋
path.data: /data/elasticsearch-6.6.1/data	#數(shù)據(jù)目錄
path.logs: /data/elasticsearch-6.6.1/logs
network.host: 0.0.0.0	#允許哪個IP訪問,0代表所有
http.port: 9200
chown -R elk:elk elasticsearch-6.6.1

啟動elasticsearch

su elk
cd /data/elasticsearch-6.6.1

# 加-d:后臺啟動
./bin/elasticsearch

自啟動腳本

#!/bin/bash
su - elk
/data/elasticsearch-6.6.1/bin/elasticsearch -d 

安裝中文分詞

# 下載
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.1/elasticsearch-analysis-ik-6.6.1.zip

# 創(chuàng)建ik目錄
mkdir /data/elasticsearch-6.6.1/plugins/ik

mv elasticsearch-analysis-ik-6.6.1.zip elasticsearch-6.6.1/plugins/ik

cd /data/elasticsearch-6.6.1/plugins/ik

unzip elasticsearch-analysis-ik-6.6.1.zip

  


四、安裝kibana(將日志以web界面形式展示)

cd /data
# 下載
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.1-linux-x86_64.tar.gz
# 解壓
tar xf kibana-6.6.1-linux-x86_64.tar.gz
cd kibana-6.6.1-linux-x86_64  

配置 

vim config/kibana.yml
# 取消以下注釋,并修改對應(yīng)IP
# 服務(wù)端口
server.port: 5601
# 指明服務(wù)運行的地址
server.host: "10.10.10.20"
# 指明elasticsearch運行的地址和端口
elasticsearch.hosts: ["http://10.10.10.20:9200"]
# 指明kibana使用的索引,這個是自定義的
kibana.index: ".kibana"

  

# 啟動,如果elasticsearch有kibana數(shù)據(jù),則配置成功

/data/kibana-6.6.1-linux-x86_64/bin/kibana 

 

五、安裝filebeat


#該組件為日志收集服務(wù),安裝在需要收集日志的服務(wù)器上
# 下載

wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.1-linux-x86_64.tar.gz

# 解壓

tar xf filebeat-6.6.1-linux-x86_64.tar.gz
cd filebeat-6.6.1-linux-x86_64

配置  

vim filebeat.yml
# 配置以下設(shè)置
##該配置在input中定義多個日志路徑,用于之后的logstash過濾,匹配不同索引

filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
fields:
log_source: sys

- type: log
enabled: true
paths:
- /var/log/httpd/*_log
fields:
log_source: nginx

output.redis: 
hosts: ["10.10.10.20:6379"]
password: ""
db: 0
key: "syslog"

  

日志輸入{
filebeat.inputs: 模塊用來指定日志文件的來源
type: 指定日志類型,在這里是log, 應(yīng)該也可以是json。
paths指定日志文件路徑。
fields: 是打標記,主要為了后面日志分析查找的方便,存儲的時候也會根據(jù)fields分類存儲,相同fields的數(shù)據(jù)存在同一個redis key中
}
日志輸出{
output.redis:指定輸出到redis
hosts:指定redis主機,可以指定多臺。
password:redis密碼,redis默認沒有密碼,在這里設(shè)為空就行
key:指定存入redis中的key
db: 指定存在redis中的db編號(redis默認安裝有16個databases,0~15, 默認是存儲在db0中的)
}

# 啟動

./filebeat -e -c filebeat.yml

 

六、安裝logstash(日志收集)
# 下載并解壓

wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.1.tar.gz
tar xf logstash-6.6.1.tar.gz
cd logstash-6.6.1

 

# 創(chuàng)建配置文件,配置以下設(shè)置

vim config/syslog.conf
#該配置在output中使用fields標簽匹配不同索引,從而創(chuàng)建倆個不同的索引給kibana使用
input {
redis {
host => "10.10.10.20"
port => 6379
data_type => "list"
key => "syslog"
db => 0
}
}
output {
if [fields][log_source] == 'sys' {
elasticsearch {
hosts => ["http://10.10.10.20:9200"]
index => "syslog-%{+YYYY.MM.dd}"
id => "syslog_id"
}
}

if [fields][log_source] == 'nginx' {
elasticsearch {
hosts => ["http://10.10.10.20:9200"]
index => "nginxlog-%{+YYYY.MM.dd}"
id => "nginx_id"
}
}
}

 

 

1.key => “syslog” 對應(yīng)filebeat.yml配置中,redis設(shè)置的key
2.if [fields][log_source] == ‘sys’ 對應(yīng)filebeat.yml配置中,input設(shè)置fields標簽
3.index => “nginxlog-%{+YYYY.MM.dd}” 創(chuàng)建elasticsearch索引


# 啟動

./bin/logstash -f config/syslog.conf

 

訪問kibana,并添加索引
訪問:IP:5601,沒有密碼,密碼認證需要收費,可以使用nginx代理認證

創(chuàng)建索引:
點擊 management
點擊 Index Patterns
點擊 Create index pattern
在當前配置頁中會顯示能添加的索引,如果沒有顯示,請查看logstash和filebeat配置
添加索引:nginxlog-* , 該索引為elasticsearch中的索引
下一步:選擇@timestamp
點擊:Create index pattern 創(chuàng)建成功

查看日志:
點擊:Discover
當前頁就是搜索日志頁面,有切換索引,添加搜索標簽,選擇時間范圍等功能

kibana漢化
Kibana在6.7版本以上,支持了多種語言。并且自帶在安裝包里,之前版本需要下載中文包安裝


Kibana在6.7版本以下

wget https://mirrors.yangxingzhen.com/kibana/Kibana_Hanization.tar.gz
tar xf Kibana_Hanization.tar.gz
cd Kibana_Hanization/old/
python main.py /data/kibana-6.6.1-linux-x86_64

Kibana在6.7版本以上
vim /data/kibana-6.6.1-linux-x86_64/config/kibana.yml
# 取消注釋
i18n.locale: "zh-CN"