适用场景:多个项目或服务,独立部署,各个服务有自己的 log 文件。为便于查看、过滤等,可单机部署 ELK 服务后,各个服务通过 filebeat 服务将 log 发送至 ELK 机器。
一、安装 java
$ sudo yum install java
$ java -version
openjdk version "11.0.5" 2019-10-15 LTS
OpenJDK Runtime Environment Corretto-11.0.5.10.1 (build 11.0.5+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.5.10.1 (build 11.0.5+10-LTS, mixed mode)
对于 elasticsearch、logstash 和 kibana,Elastic.co 都提供了多种环境的安装方式,这里只介绍通过 RPM 的方式,其他环境可参考官网文档。
二、安装 elasticsearch
- 下载安装公钥。
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 增加 yum 源。在
/etc/yum.repos.d/
创建文件elasticsearch.repo
并写入以下内容:[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,如果机器内存不够启动时会报错$ 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 Elasticsearch
Not enough space
,将/etc/elasticsearch/jvm.options
中的-Xms
和-Xmx
改小后重试即可。
三、安装 logstash
- 下载安装公钥。如果上面执行过,可跳过。
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 增加 yum 源。在
/etc/yum.repos.d/
创建文件logstash.repo
并写入以下内容:[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
- 安装
$ 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
,并写入以下内容:input { 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 } }
- 启动
$ sudo systemctl start logstash
四、安装 kibana
- 下载安装公钥。如果上面执行过,可跳过。
$ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
- 增加 yum 源。在
/etc/yum.repos.d/
创建文件kibana.repo
并写入以下内容:[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
- 安装、启动
$ 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 源
$ sudo rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
- 安装 nginx
$ sudo yum install nginx
- 配置 nginx。修改
/etc/nginx/conf.d/default.conf
中/
路由的配置,如下:location / { 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
$ sudo yum install httpd
- 设置用户。用户名:jack,密码:123456
$ sudo htpasswd -bc /etc/nginx/pwd.db jack 123456
- 启动 nginx
$ sudo systemctl nginx.service
至此,访问该机器的 80 端口,通过用户密码验证,即可访问到 kibana 服务。
六、安装 filebeat
filebeat 服务可安装在任何有 log 文件的机器上,其实时监听 log 文件,并将内容发送至 logstash 服务。
- 下载 rpm 文件,并安装
$ 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 [15075156388b44390301f070960fd8aeac1c9712 built 2019-10-28 19:46:13 +0000 UTC]
- 配置。配置文件按模块分为了几部分,如 Filebeat inputs、Filebeat modules、Outputs等,在这里只需关心两个模块,一是 Filebeat inputs,另个为 Outputs。
Filebeat inputs 用来配置 Filebeat 服务所监听、读取的文件,以及读取时的一些选项,这里的文件,即为 log 文件。
Outputs 用来配置读取到的内容,如何输出。配置里缺省的输出方向是 Elasticsearch,这里需要切换为 Logstash。Logstash 的 SSL 目前尚未开启,因此只需配置 hosts 即可。* enabled: 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,都会重新开始一行。
如无特殊需求,修改下面内容中的* hosts: ["{host}:5044"],logstash 服务所在的主机地址
paths
和appname
以及hosts
,替换原 filebeat.yml 文件内容,即可。#=========================== 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: ~
- 启动
$ sudo systemctl enable filebeat.service $ sudo systemctl start filebeat.service