ELK部署:
介绍:
ELK是Elasticsearch + Logstash + Kibana 这种架构的简写。这是一种日志分平台析的架构。从前我们用shell三剑客(grep, sed, awk)来分析日志, 虽然也能对付大多数场景,但当日志量大,分析频繁,并且使用者可能不会shell三剑客的情况下, 配置方便,使用简单,并且分析结果更加直观的工具(平台)就诞生了,它就是ELK。 ELK是开源的,并且社区活跃,用户众多
架构说明:
1、 Elasticsearch + Logstash + Kibana
这是一种最简单的架构。这种架构,通过logstash收集日志,Elasticsearch分析日志,然后在Kibana(web界面)中展示。这种架构虽然是官网介绍里的方式,但是往往在生产中很少使用。
2 、Elasticsearch + Logstash + filebeat + Kibana
与上一种架构相比,这种架构增加了一个filebeat模块。filebeat是一个轻量的日志收集代理,用来部署在客户端,优势是消耗非常少的资源(较logstash), 所以生产中,往往会采取这种架构方式,但是这种架构有一个缺点,当logstash出现故障, 会造成日志的丢失。
3、 Elasticsearch + Logstash + filebeat + redis(也可以是其他中间件,比如kafka) + Kibana
这种架构是上面那个架构的完善版,通过增加中间件,来避免数据的丢失。当Logstash出现故障,日志还是存在中间件中,当Logstash再次启动,则会读取中间件中积压的日志。目前我司使用的就是这种架构,我个人也比较推荐这种方式。

 

步骤:

一、安装jdk环境 (elasticsearch、logstash服务都需要jdk环境)

jdk介绍:
a、JDK (Java Development Kit) 是 Java 语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib合起来就称为jre。
b、JRE(Java Runtime Environment,Java运行环境),包含JVM标准实现及Java核心类库。JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器)
c、JVM 是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。

1. 下载JDK
JDK官网下载地址:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
请根据自己服务器情况下载对应版本,linux是下载tar.gz结尾的包

2. 上传linux服务器
把JDK包上传服务器有多种方法,我是用Xshell自带的ftp功能上传服务器,比较简单,这边不多讲。
上传完成后,解压到/usr/local/

tar xf jdk-8u191-linux-x64.tar.gz -C /usr/local/
#在/usr/local/下会生成一个jdk的目录

3.设置环境变量
在/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
#加载新声明的环境变量

  

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存储系统。

Redis是一个开源的使用ANSI C语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。

它通常被称为数据结构服务器,因为值(value)可以是字符串(String), 哈希(Hash), 列表(list), 集合(sets) 和 有序集合(sorted sets)等类型
安装步骤:
1、安装环境,下载,解压,编译
2、修改配置
3、启动,登录

安装环境、下载、解压、编译
# 下载

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
# 关闭
./src/redis-cli -p 6379 shutdown
# 登录
./src/redis-cli -h 127.0.0.1 -p 6379 


三、安装elasticsearch


介绍
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:

1.分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
2.实时分析的分布式搜索引擎。
3.可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。

安装步骤
1.下载,解压
2.修改linux内核,设置资源参数
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

# 创建用户,需要以普通用户启动

useradd elk

# 创建目录,用于存放数据和日志

cd /data/elasticsearch-6.6.1
mkdir data logs  

修改linux内核,设置资源参数

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

# 执行以下命令,确保生效配置生效:

sysctl -p

设置资源参数

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

# 设置用户资源参数

vim /etc/security/limits.d/20-nproc.conf 
# 设置elk用户参数
elk soft nproc 65536

修改配置

cd /data/elasticsearch-6.6.1

vim config/elasticsearch.yml	
#修改,取消以下配置注释
path.data: /data/elasticsearch-6.6.1/data	#数据目录
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

# 创建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
# 取消以下注释,并修改对应IP
# 服务端口
server.port: 5601
# 指明服务运行的地址
server.host: "10.10.10.20"
# 指明elasticsearch运行的地址和端口
elasticsearch.hosts: ["http://10.10.10.20:9200"]
# 指明kibana使用的索引,这个是自定义的
kibana.index: ".kibana"

  

# 启动,如果elasticsearch有kibana数据,则配置成功

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

 

五、安装filebeat


#该组件为日志收集服务,安装在需要收集日志的服务器上
# 下载

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
# 配置以下设置
##该配置在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, 应该也可以是json。
paths指定日志文件路径。
fields: 是打标记,主要为了后面日志分析查找的方便,存储的时候也会根据fields分类存储,相同fields的数据存在同一个redis key中
}
日志输出{
output.redis:指定输出到redis
hosts:指定redis主机,可以指定多台。
password:redis密码,redis默认没有密码,在这里设为空就行
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

 

# 创建配置文件,配置以下设置

vim config/syslog.conf
#该配置在output中使用fields标签匹配不同索引,从而创建俩个不同的索引给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” 对应filebeat.yml配置中,redis设置的key
2.if [fields][log_source] == ‘sys’ 对应filebeat.yml配置中,input设置fields标签
3.index => “nginxlog-%{+YYYY.MM.dd}” 创建elasticsearch索引


# 启动

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

 

访问kibana,并添加索引
访问:IP:5601,没有密码,密码认证需要收费,可以使用nginx代理认证

创建索引:
点击 management
点击 Index Patterns
点击 Create index pattern
在当前配置页中会显示能添加的索引,如果没有显示,请查看logstash和filebeat配置
添加索引:nginxlog-* , 该索引为elasticsearch中的索引
下一步:选择@timestamp
点击:Create index pattern 创建成功

查看日志:
点击: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"