参考文章
适用场景:多个项目或服务,独立部署,各个服务有自己的 log 文件。为便于查看、过滤等,可单机部署 ELK 服务后,各个服务通过 filebeat 服务将 log 发送至 ELK 机器。
一、安装 java
1 | $ sudo yum install java |
对于 elasticsearch、logstash 和 kibana,Elastic.co 都提供了多种环境的安装方式,这里只介绍通过 RPM 的方式,其他环境可参考官网文档。
二、安装 elasticsearch
- 下载安装公钥。
1
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 增加 yum 源。在
/etc/yum.repos.d/
创建文件elasticsearch.repo
并写入以下内容:1
2
3
4
5
6
7
8[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md - 安装、启动 注意:elasticsearch 基于 java,默认占用的最小内存是 1G,如果机器内存不够启动时会报错
1
2
3
4
5
6
7
8
9
10
11$ sudo yum install elasticsearch
$ sudo systemctl daemon-reload
$ sudo systemctl enable elasticsearch.service
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
$ sudo systemctl start elasticsearch.service
$ sudo systemctl | grep elasticsearch
elasticsearch.service loaded active running ElasticsearchNot enough space
,将/etc/elasticsearch/jvm.options
中的-Xms
和-Xmx
改小后重试即可。
三、安装 logstash
- 下载安装公钥。如果上面执行过,可跳过。
1
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 增加 yum 源。在
/etc/yum.repos.d/
创建文件logstash.repo
并写入以下内容:1
2
3
4
5
6
7
8[logstash-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md - 安装
1
2
3
4
5
6$ sudo yum install logstash
$ sudo systemctl daemon-reload
$ sudo systemctl enable logstash.service
Created symlink from /etc/systemd/system/multi-user.target.wants/logstash.service to /etc/systemd/system/logstash.service. - 配置。在
/etc/logstash/conf.d/
创建文件beat2es.conf
,并写入以下内容:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22input {
beats{
port => 5044
ssl => false
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:[@metadata][timestamp]} %{DATA:message" }
overwrite => [ "message" ]
}
date {
match => [ "[@metadata][timestamp]" , "yyyy-MM-dd HH:mm:ss,SSS" ]
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "%{[fields][appname]}-%{+YYYY.MM.dd}"
sniffing => true
}
} - 启动
1
$ sudo systemctl start logstash
四、安装 kibana
- 下载安装公钥。如果上面执行过,可跳过。
1
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 增加 yum 源。在
/etc/yum.repos.d/
创建文件kibana.repo
并写入以下内容:1
2
3
4
5
6
7
8[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md - 安装、启动
1
2
3
4
5
6
7
8$ sudo yum install kibana
$ sudo systemctl daemon-reload
$ sudo systemctl enable kibana.service
Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
$ sudo systemctl start kibana.service
至此,ELK 服务已经部署完成。logstash 监听 5044 端口,所有发送到 5044 端口的内容都会传送至 elasticsearch,可通过 kibana 可视化搜索页面进行查询。
kibana 默认部署在 locaohost:5601,为了增加安全性,需通过 nginx 为 kibana 设置用户登陆访问。
如果不需要安全性,可修改 /etc/kibana/kibana.yml
文件,将其中的 server.host
的值改为 0.0.0.0
后重启 kibana 服务,这样外网可直接通过该机器的 5601 端口访问 kibana 服务。
五、设置 kibana 登陆访问
- 添加 nginx 源
1
$ sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
- 安装 nginx
1
$ sudo yum install nginx
- 配置 nginx。修改
/etc/nginx/conf.d/default.conf
中/
路由的配置,如下:1
2
3
4
5
6
7
8
9location / {
auth_basic "secret";
auth_basic_user_file /etc/nginx/db/passwd.db;
proxy_pass http://localhost:5601;
proxy_set_header Host $host:5601;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Via "nginx";
} - 安装 httpd
1
$ sudo yum install httpd
- 设置用户。用户名:jack,密码:123456
1
$ sudo htpasswd -bc /etc/nginx/pwd.db jack 123456
- 启动 nginx
1
$ sudo systemctl nginx.service
至此,访问该机器的 80 端口,通过用户密码验证,即可访问到 kibana 服务。
六、安装 filebeat
filebeat 服务可安装在任何有 log 文件的机器上,其实时监听 log 文件,并将内容发送至 logstash 服务。
下载 rpm 文件,并安装
1
2
3
4
5
6
7
8
9
10
11$ curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.2-x86_64.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 22.7M 100 22.7M 0 0 24.8M 0 --:--:-- --:--:-- --:--:-- 24.8M
$ sudo rpm -vi filebeat-7.4.2-x86_64.rpm
Preparing packages...
filebeat-7.4.2-1.x86_64
$ filebeat version
filebeat version 7.4.2 (amd64), libbeat 7.4.2 [15075156388b44390301f070960fd8aeac1c9712built 2019-10-28 19:46:13 +0000 UTC]配置。配置文件按模块分为了几部分,如 Filebeat inputs、Filebeat modules、Outputs等,在这里只需关心两个模块,一是 Filebeat inputs,另个为 Outputs。
Filebeat inputs 用来配置 Filebeat 服务所监听、读取的文件,以及读取时的一些选项,这里的文件,即为 log 文件。1
2
3
4
5
6
7
8
9
10
11
12
13enabled: true 表示开启
paths: 指定 log 文件的路径
fields: 配置元数据,appname 为必填项,用来区分不同项目
multiline.pattern: 正则表达式
multiline.negate: 是否反向。true 表示匹配 multiline.pattern 时开始新的一行;false 表示不匹配时开始新的一行
multiline.match: 连接的位置。after 表示不匹配 multiline.pattern 时连在上一句后面;before 表示连在下一句前面
这 3 项用来设置多行识别,'^[0-9]{4}-[0-9]{2}-[0-9]{2}' 是识别,行首格式为 YYYY-MM-DD 的日期,即每当行首为该格式的日期时,如 2019-11-15,都会重新开始一行。Outputs 用来配置读取到的内容,如何输出。配置里缺省的输出方向是 Elasticsearch,这里需要切换为 Logstash。Logstash 的 SSL 目前尚未开启,因此只需配置 hosts 即可。
1
hosts: ["{host}:5044"],logstash 服务所在的主机地址
如无特殊需求,修改下面内容中的
paths
和appname
以及hosts
,替换原 filebeat.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
52#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/app.log
fields:
appname: {your-app-name}
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
#============================= Filebeat modules ===============================
filebeat.config.modules:
# Glob pattern for configuration loading
path: ${path.config}/modules.d/*.yml
# Set to true to enable config reloading
reload.enabled: false
#==================== Elasticsearch template setting ==========================
setup.template.settings:
index.number_of_shards: 1
#index.codec: best_compression
#_source.enabled: false
#================================ Outputs =====================================
#----------------------------- Logstash output --------------------------------
output.logstash:
# The Logstash hosts
hosts: ["{host}:5044"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"
#================================ Processors =====================================
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~启动
1
2
3$ sudo systemctl enable filebeat.service
$ sudo systemctl start filebeat.service