文章

ELK源码安装

1. 环境参数

1
2
3
4
5
6
7
8
9
10
11
操作系统:  Centos 7.5 64位
	  ES:  6.3.2
  kibana:  6.3.2
logstash:  6.3.2
	 jdk:  1.8
  ES用户:  elk

节点:
	192.168.11.132  master + node-01
	192.168.11.133  node-02
    

2.下载

1
2
3
4
5
cd /opt

ES:   wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.tar.gz
kibana:   wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.2-linux-x86_64.tar.gz
logstash:   wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.tar.gz

3. jdk环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## 2台机器都要安装此环境
cd /opt
# 将文件上传至本目录: /opt/jdk1.8.0_181.tar.gz

tar -zxvf jdk1.8.0_181.tar.gz
mv jdk1.8.0_181 /usr/local/jdk1.8
chmod -R 755 /usr/local/jdk1.8
vim /etc/profile
	export JAVA_HOME=/usr/local/jdk1.8
	export JRE_HOME=${JAVA_HOME}/jre
	export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
	export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile
java -version

4. 配置+启动: ES

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
******* 配 置 ********
# 启动elk需要非root用户,所以创建elk用户,elk组
useradd elk (centos7 默认会创建elk组)

cd /opt
tar -zxvf elasticsearch-6.3.2.tar.gz
mv elasticsearch-6.3.2 /usr/local/elastic-6.3.2
chown -R elk:elk /usr/local/elastic-6.3.2

# 在根目录 /data 分别创建data目录和logs目录,用来存放索引数据和日志数据
mkdir -p /data/elastic/data /data/elastic/logs
chown -R elk:elk /data/elastic

cd /usr/local/elastic-6.3.2/config

vim jvm.options
	# 修改 jvm.options: 在es解压之后的config目录中 
	# 默认只需要调整HEAP大小,最好不超过内存的50%, 内存为4G
	-Xms2g
	-Xmx2g

mv elasticsearch.yml elasticsearch.yml.bak
vim elasticsearch.yml

elasticsearch.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
master:
# 集群名字,相同集群名字的节点会放到同一个集群下
cluster.name: muker_elk
# 节点名字
node.name: node-01
node.master: true
node.data: true
path.data: /data/elastic/data
path.logs: /data/elastic/logs
#elasticsearch官网建议生产环境需要设置bootstrap.memory_lock: true
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
# 监听访问地址为任意网段
network.host: 192.168.11.132
http.port: 9400
#discovery.zen.ping.multicast.enabled: false
#指明集群中其它可能为master的节点ip,以防es启动后发现不了集群中的其他节点。
discovery.zen.ping.unicast.hosts: ["192.168.11.132", "192.168.11.133"]
#指定集群中的节点中有几个有master资格的节点,对于大集群可以写3个以上。
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: "*"
#线程最大不能超过cpu核数
thread_pool.bulk.size: 2
thread_pool.bulk.queue_size: 1000

node:
# 集群名字,相同集群名字的节点会放到同一个集群下
cluster.name: muker_elk
# 节点名字
node.name: node-02
node.master: false
node.data: true
path.data: /data/elastic/data
path.logs: /data/elastic/logs
#elasticsearch官网建议生产环境需要设置bootstrap.memory_lock: true
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
# 监听访问地址为任意网段
network.host: 192.168.11.133
http.port: 9400
#discovery.zen.ping.multicast.enabled: false
#指明集群中其它可能为master的节点ip,以防es启动后发现不了集群中的其他节点。
discovery.zen.ping.unicast.hosts: ["192.168.11.132", "192.168.11.133"]
#指定集群中的节点中有几个有master资格的节点,对于大集群可以写3个以上。
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: "*"
#线程最大不能超过cpu核数
thread_pool.bulk.size: 2
thread_pool.bulk.queue_size: 1000

增加系统内存配置

1
2
3
4
5
6
# 使用中可能会因为系统内存等问题导致启动失败
vim /etc/sysctl.conf
	# 增加以下参数
	vm.max_map_count=655360
# 执行以下命令,确保生效配置生效:
sysctl -p

设置资源参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 65536
* hard nproc 131072
elk soft memlock unlimited
elk hard memlock unlimited
#设置用户资源参数
vim /etc/security/limits.d/20-nproc.conf
	# 设置elk用户参数
	elk    soft    nproc     65536

# 关闭防火墙, 或者使节点与master之间开放端口可以互相访问
	systemctl stop firewalld
	systemctl status firewalld
	systemctl disable firewalld

启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
******* 启 动 ********
su elk
cd /usr/local/elastic-6.3.2/bin
./elasticsearch

# 也可以使用 -d 进入后台
./elasticsearch -d

# 遇到问题:
[2020-11-11T20:14:39,984][WARN ][o.e.b.JNANatives         ] Unable to lock JVM Memory: error=12, reason=无法分配内存
[2020-11-11T20:14:39,988][WARN ][o.e.b.JNANatives         ] This can result in part of the JVM being swapped out.
[2020-11-11T20:14:39,989][WARN ][o.e.b.JNANatives         ] Increase RLIMIT_MEMLOCK, soft limit: 65536, hard limit: 65536
[2020-11-11T20:14:39,989][WARN ][o.e.b.JNANatives         ] These can be adjusted by modifying /etc/security/limits.conf, for example: 
	# allow user 'elk' mlockall
	elk soft memlock unlimited
	elk hard memlock unlimited

解决:
	使用elk用户登录

5. 配置+启动: kibana

解压+安装

1
2
3
4
5
6
7
cd /opt
tar -zxvf kibana-6.3.2-linux-x86_64.tar.gz
mv kibana-6.3.2-linux-x86_64 /usr/local/kibana-6.3.2
cd /usr/local/kibana-6.3.2/config
cp kibana.yml kibana.yml.bak
vim kibana.yml

kibana.yml

1
2
3
4
5
修改以下参数:
server.port: 5601           #开启默认端口5601,本文修改默认端口为5601,如果是使用外网访问设置为: 0.0.0.0
server.host: “192.168.11.132”   #站点地址
elasticsearch.url: http://192.168.11.132:9400   #指向elasticsearch服务的ip地址
kibana.index: “.kibana”

启动服务

1
2
3
4
5
6
7
8
9
10
11
# ******** 启 动 ********
/usr/local/kibana-6.3.2/bin/kibana
#访问
192.168.11.132:5061

# ******** 后 台 启 动 ********
nohup /usr/local/kibana-6.3.2/bin/kibana &
#额外: 
#	在kibana里安装marvel插件
#		bin/kibana plugin --install elasticsearch/marvel/latest

6. 配置+启动: logstash

解压+安装

1
2
3
4
cd /opt
tar -zxvf logstash-6.3.2.tar.gz
mv logstash-6.3.2 /usr/local/
cd /usr/local/logstash-6.3.2/config/

jvm.options

1
2
3
4
vim jvm.options
	# 默认只需要调整HEAP大小,最好不超过内存的50%, 内存为4G
	-Xms2g
	-Xmx2g

logstash.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 新加一个配置文件 为: 过滤日志用, eg: logstash.conf
# vim logstash.conf
input{
file {
	#加载的日志路径
	path => "/data/elastic/logs/*"
	start_position => beginning
}
}
output {
	stdout { codec=> rubydebug }
	# es的端口
	elasticsearch {
		  hosts => "192.168.11.132:9400"
		  index  => "logstash-%{+YYYY-MM-dd}"
	}
}

启动服务

1
2
3
# ****** 启 动 ******
/usr/local/logstash-6.3.2/bin/logstash -f /usr/local/logstash-6.3.2/config/logstash.conf

复杂配置文件使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 配置文件:
# 加载多个配置文件:
	
方法一:
vim /usr/local/logstash-6.3.2/config/pipelines.yml
#末尾添加
- pipeline.id: fscloude
 pipeline.workers: 1
 pipeline.batch.size: 1
 path.config: "/usr/local/logstash-6.3.2/config/conf.d/fscloude_log.conf"
- pipeline.id: elastic
 queue.type: persisted
 path.config: "/usr/local/logstash-6.3.2/config/conf.d/elastic.conf"
 
 加载 /usr/local/logstash-6.3.2/config/conf.d/ 此目录下的两个配置文件
 fscloude_log.conf
 elastic.conf
 
 按照正常写即可,不需要做if判断类型
 
启动: 加载目录 不用使用 * , 直接加载此目录下的多余 .conf 文件
/usr/local/logstash-6.3.2/bin/logstash -f /usr/local/logstash-6.3.2/config/conf.d/

方法二:
/usr/local/logstash-6.3.2/config/pipelines.yml 此目录下的文件不做修改,可全屏蔽

/usr/local/logstash-6.3.2/config/conf.d/ 此目录下的两个配置文件 需要做判断,否则日志内容会重复
在过滤种加
if [type] == "fscloude_log"
{
	mutate {
		add_tag => [ "fscloude_log" ]
	}
}

7. kibana配置

filebeat或者logstrath起来之后 添加索引

找到索引

![[00-attach/5641710344286_.pic.jpg]]

创建索引规则

![[00-attach/5651710344293_.pic.jpg]]

8. 查看日志内容

![[00-attach/5661710344300_.pic.jpg]]

9. 日志处理

1
rsyslog日志设置:
本文由作者按照 CC BY 4.0 进行授权