试验环境
本次试验的elastic stack
软件都为7.0.1
版本,现在官网最新的为7.1版本,用户可在官方下载下载地址。
主机名 | ip地址 | 服务 |
---|---|---|
efk-node1 | 192.168.20.211 | elasticsearch、kibana、jdk8 |
efk-node2 | 192.168.20.212 | elasticsearch、cerebro、jdk8 |
real-server | 192.168.20.250 | filebeat |
环境准备
安装JDK
elasticsearch需要jdk环境的支持,7.0.1版本默认已经自带JDK了,但是为了日后扩展问题,我们还是手动配置一边JDK环境。以下操作在efk-node1
和efk-node2
主机上进行:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# 下面下载链接因授权问题,需用户前往JDK官网下载
$ wget https://download.oracle.com/otn/java/jdk/8u171-b12/478a62b7d4e34b78b671c754eaaf38ab/jdk-8u171-linux-x64.tar.gz
$ tar zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local/
$ cat >> /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk1.8.0_171
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
EOF
$ source /etc/profile
# 验证JDK, JDK配置完成
$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
设置服务器的最大文件数
1 | $ cat >> /etc/security/limits.conf << EOF |
设置服务器打开的最大进程数
1 | $ cat > /etc/security/limits.d/20-nproc.conf << EOF |
设置nmap数量对虚拟内存的支持
1 | $ cat >> /etc/sysctl.conf << EOF |
本地host解析
1 | cat >> /etc/hosts << EOF |
安装elasticsearch
以下操作在efk-node1
和efk-node2
主机上进行:
下载和解压
1 | # 创建elastic工作目录 |
修改配置文件
下面只列出已配置的参数1
2
3
4
5
6
7
8
9
10
11$ cat elasticsearch-7.0.1/config/elasticsearch.yml | egrep -v "^$|^#"
cluster.name: efk-cluster # 集群名称
node.name: efk-node1 # 节点名称,212服务器改成efk-node2
path.data: /var/lib/elasticsearch # elasticsearch数据目录
path.logs: /var/log/elasticsearch # elasticsearch日志目录
network.host: 0.0.0.0 # elasticsearch绑定的地址
http.port: 9200 # elasticsearch绑定的端口
discovery.seed_hosts: ["efk-node1", "efk-node2"] #集群发现
cluster.initial_master_nodes: ["efk-node1", "efk-node2"] #第一次访问初始的集群节点
xpack.security.enabled: true # ssl\tls安全参数
xpack.security.transport.ssl.enabled: true # ssl\tls安全参数
创建运行elasticsearch用户
elasticsearch默认是不运行root用户运行的,因此我们得创建一个新用户来运行elasticsearch。
1 | $ useradd elastic |
创建依赖文件
1 | $ mkdir /var/log/elasticsearch # 创建日志目录 |
准备elasticsearch systemctl文件
1 | [Unit] |
启动elasticsearch
1 | $ systemctl daemon-reload # 加载systemctl配置文件 |
Tips: elasticsearch7.0.1安装完默认自带基础版的X-Pack功能,使用铂金版的需要购买或者参考破解X-pack进行破解。
验证集群状态
通过上面的配置,我们的elasticsearch服务器已经启动,并且默认监听在9200
和9300
端口。9200端口
: 为web访问提供服务;9300端口
:为集群节点提供通信。1
2
3
4
5
6
7
8
9
10# 验证集群节点数,其中master为*的代表该节点为主节点
$ curl http://192.168.20.211:9200/_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.20.212 10 39 0 0.00 0.01 0.05 mdi - efk-node2
192.168.20.211 18 37 0 0.00 0.01 0.05 mdi * efk-node1
# 验证集群健康状态,status为green表示正常
$ curl http://192.168.20.211:9200/_cat/health?v
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1558517253 09:27:33 efk-cluster green 2 2 6 3 0 0 0 0 - 100.0%
由上可知,我们的elasticsearch集群已经正常工作了,并且在2台集群节点下/var/lib/elasticsearch目录下都有相同的数据。更多关于elasticsearch REST API请参考官方说明。
cluster apis _cat apis Search apis Document apis
安装 Kibana
以下操作只在efk-node1
主机上进行:
下载和解压
1 | # 进入elastic工作目录 |
修改配置文件
下面只列出已配置的参数1
2
3
4
5
6
7
8
9
10
11
12$ cat kibana-7.0.1-linux-x86_64/config/kibana.yml | egrep -v "^$|^#"
server.port: 5601 # kibana服务端口
server.host: "0.0.0.0" # kibana服务地址
elasticsearch.hosts: ["http://192.168.20.201:9200"] # es访问地址,kibana需要和它通信
elasticsearch.username: "elastic" # es帐号,如果是X-pack铂金版可配
elasticsearch.password: "pyker123456" # es密码,如果是X-pack铂金版可配
elasticsearch.logQueries: true # 查询日志是否发送到ES,配合logging.json: true
pid.file: /var/run/kibana.pid # kibana的进行id文件
logging.dest: /var/log/kibana.log # kibana日志文件
logging.json: true # 以json格式输出日志
logging.verbose: true # 记录所有事件,包括系统使用信息和所以请求
i18n.locale: "zh-CN" # 设置kibana为中文
创建依赖文件
1 | $ touch /var/log/kibana.log # 创建日志文件 |
Tips:默认Kibana是支持root运行的,我这里为了统一elasticsearch运行环境所以打算elastic用户运行。
准备kibana systemctl文件
1 | [Unit] |
启动kibana
1 | $ systemctl daemon-reload # 加载systemctl配置文件 |
Kibana默认监控在5601端口上,此时可以通过
http://192.168.20.211:5601
访问kibana。
安装cerebro可视化集群管理工具
cerebro是一个使用Scala,Play Framework,AngularJS和Bootstrap构建的开源(MIT许可)elasticsearch web可视化的监控工具,Github项目
以下操作只在efk-node2
主机上进行:
下载和解压
请前往https://github.com/lmenezes/cerebro/releases
地址下载cerebro工具1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16$ tar zxvf cerebro-0.8.3.tgz
$ vim cerebro-0.8.3/conf/application.conf
# 设置cerebro密码登陆认证
auth={
type: basic
settings: {
username="admin"
password="pyker123456"
}
}
# 文件最后配置elasticsearch地址
hosts = [
{
host = "http://192.168.20.211:9200"
name = "efk-cluster"
},
准备cerebro systemctl文件
1 | [Unit] |
命令启动cerebro
1 | # 默认9000端口 |
systemctl方式启动cerebro
1 | $ systemctl daemon-reload # 加载systemctl配置文件 |
访问cerebro
通过浏览器访问http://192.168.20.212:1234
就可以cerebro工具了。该工具详细的显示了es集群状态、节点数、索引数、分片数、文档数以及数据大小等参数。
安装filebeat
此前文档我们已经说明了关于filebeat的原理,以及一些配置文件参数。现在我们只初略的说明我们已使用的配置参数。以下操作只在real-server
主机上进行:(也就是我们业务所跑的服务器,我们要抓取的是业务日志,所以当然是安装在业务服务器上咯)
下载和解压
1 | # 进入elastic工作目录 |
本例我们使用filebeat监控tomcat日志和nginx日志
修改配置文件
以配置文件方式支持tomcat日志输入
下面只列出已配置的参数,关于参数说明,请参考此前文档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$ cat filebeat-7.0.1-linux-x86_64/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/local/tomcat/logs/catalina.out # 监控tomcat控制台catalina.out日志文件
fields:
log_topic: tomcat_access_logs
exclude_lines: ['收到ping的消息']
multiline.pattern: '^[[:space:]]+|^Caused by:'
multiline.negate: false
multiline.match: after
ignore_older: 0
close_inactive: 2m
- type: log
enabled: true
paths:
- /usr/local/tomcat/logs/localhost_access.* # 监控tomcat访问localhost_access日志文件
fields:
log_topic: tomcat_catalina_logs
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: true
setup.template.settings:
index.number_of_shards: 1
setup.kibana:
host: "192.168.20.211:5601"
output.elasticsearch: # 我们这里直接输出到ES,当然也可以输出到logstash、kafka等中间件
hosts: ["192.168.20.211:9200"]
#protocol: "https"
username: "elastic"
password: "pyker123456"
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
catalina.out
和localhost_access
都需要使用一定的格式。方便filebeat处理多行事件日志。
以模版方式支持nginx日志输入
默认filebeat自带诸多服务日志模版,如:nginx、redis、apache、IIS、kafka等等。默认都在filebeat解压后module
、modules.d
目录中。1
2
3
4
5
6
7
8$ cat /elastic/filebeat-7.0.1-linux-x86_64/modules.d/nginx.yml.disabled
- module: nginx
access:
enabled: true
var.paths: ["/data/wwwlogs/access.log*"] # 配置nginx实际的访问日志路径,多个文件逗号分开
error:
enabled: true
var.paths: ["/data/wwwlogs/error_nginx.log*"] # 配置nginx实际的错误日志路径
启动nginx模版
1 | $ cd /elastic/filebeat-7.0.1-linux-x86_64 |
准备filebeat systemctl文件
1 | [Unit] |
启动filebeat
1 | $ systemctl daemon-reload # 加载systemctl配置文件 |
至此简单的EFK集群搭建完成。在生成环境中 我们还会在filebeat和elasticsearch中间加入kafka和logstash来提高日志数据的高效传输和更强的日志过滤功能,而kafka又可以配置成集群模式。
在当前文档中我们并未说明kibana如何使用,请参考官方使用教程