一、ELK简介

官网:​​https://www.elastic.co/​

官网权威指南:https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html

安装指南:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

ELK​是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。

Elasticsearch​是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

Logstash​是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

Kibana​是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据

Filebeat ​随附可观测性和安全数据源模块,这些模块简化了常见格式的日志的收集、解析和可视化过程,只需一条命令即可。功能与logstash对比更轻便。

二、架构

Centos7环境ELK搭建_ELK

三、环境

Centos7 三台(两台client、一台server)

IP:192.168.32.100 安装: elasticsearch、logstash、Kibana、Nginx

IP:  192.168.32.101 安装:    elasticsearch、 logstash

IP:  192.168.32.102 安装:    elasticsearch、 Filebeat

四、安装与配置

安装配置elasticsearch

配置yum云或直接wget安装

安装elasticsearch的yum源的密钥(这个需要在所有服务器上都配置)
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
配置elasticsearch的yum源
# vim /etc/yum.repos.d/elasticsearch.repo
在elasticsearch.repo文件中添加如下内容
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
yum install -y elasticsearch //也可以直接下载rpm文件,然后安装
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.23.rpm
rpm -ivh elasticsearch-6.8.23.rpm

安装java环境

配置环境变量
vi /etc/profile
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
安装java环境(java环境必须是1.8版本以上的)
官网下载地址:https://www.oracle.com/java/technologies/downloads/#java8
rpm -ivh jdk-8u321-linux-x64.rpm
java -version //查看java版本
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)

配置elasticsearch

主节点100配置
# vim /etc/elasticsearch/elasticsearch.yml
找到配置文件中的cluster.name,打开该配置并设置集群名称
cluster.name: demon #自定义集群名称
path.data: /var/lib/elasticsearch #(存放data数据的默认目录)
node.master: true #//意思是该节点为主节点
node.name: es-master //自定义节点主机名
node.data: false
network.host: 0.0.0.0 #根据实际需求可指定本机IP
discovery.zen.ping.unicast.hosts: ["192.168.32.100","192.168.32.101","192.168.32.102"]
http.port: 9200

在101和102上同样编辑配置文件
vi /etc/elasticsearch/elasticsearch.yml//增加或更改
找到配置文件中的cluster.name,打开该配置并设置集群名称
cluster.name: demon #自定义集群名称
path.data: /var/lib/elasticsearch #(存放data数据的默认目录)
node.name: es-slaver //自定义节点主机名
node.master: false
node.data: true #//意思是该节点为从节点
network.host: 0.0.0.0#根据实际需求可指定本机IP
discovery.zen.ping.unicast.hosts: ["192.168.32.100","192.168.32.101","192.168.32.102"]
http.port: 9200
修改data存放目录属主属组
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch

防火墙放通

关闭防火墙 
systemctl stop firewalld //调测环境建议直接关闭防火墙
或者放通端口
firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=9300/tcp --permanent
firewall-cmd --reload

启动服务

systemctl enable elasticsearch.service  //开机自启
systemctl start elasticsearch.service //启动服务

curl命令查看状态

curl 'localhost:9200/_cluster/health?pretty' 健康检查
curl 'localhost:9200/_cluster/state?pretty' 集群详细信息
详细命令参考:https://zhaoyanblog.com/archives/732.html

注意事项

需要修改几个参数,不然启动会报错
vim /etc/security/limits.conf
在末尾追加以下内容(*为所有用户,也可以指定为对应用户)
* soft nofile 65536
* hard nofile 65536
* soft nproc 2048
* hard nproc 2048
* soft memlock unlimited
* hard memlock unlimited

安装配置kibana

配置yum云或直接wget安装

kibana只需100主上安装提供界面服务
yum install -y kibana
若速度太慢,可以直接下载rpm包
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.8.23-x86_64.rpm
rpm -ivh kibana-6.8.23-x86_64.rpm
安装x-pack
#根据是否登录添加账号验证需求在去官网下载安装,因为需要付费这里不介绍安装过程

配置kibana

配置文件
vim /etc/kibana/kibana.yml
server.port: 5601
server.host: 192.168.32.100 # 指定本机地址
elasticsearch.hosts: ["http://192.168.32.100:9200"] # 指定本机elasticsearch端口
logging.dest: /var/log/kibana.log
创建kibana.log文件修改主机属组
touch /var/log/kibana.log
chown kibana: /var/log/kibana.log

启动服务

systemctl enable kibana
systemctl start kibana

安装配置logstash 

配置yum云或直接wget安装

以下在100、101上执行
logstash目前不支持java9
直接yum安装(配置源同前面es的源)
yum install -y logstash //如果慢,就下载rpm包
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.8.23.rpm
rpm -ivh logstash-6.8.23.rpm

主节点100配置调测logstash​(主节点可不配置该步骤)

编辑配置文件 vi /etc/logstash/conf.d/syslog.conf  //加入如下内容
input {
syslog {
type => "system-syslog"
port => 10514
}
}
output {
elasticsearch {
hosts => ["192.168.32.100:9200"]
index => "system-syslog-%{+YYYY.MM}"
}
}

检测配置文件

检测配置文件是否配置正确
/usr/share/logstash/bin/logstash -t -f /etc/logstash/conf.d/nginx.conf
Config Validation Result: OK.
前台启动logstash
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/nginx_access.conf

测试截图

Centos7环境ELK搭建_logstash_02

配置/etc/rsyslog.conf 传输端口 (主节点需配置)

*.* @@127.0.0.1:10514 #未配置调测logstash可忽略,@@代表TCP通信,@代表UDP
*.* @@192.168.32.101:10514 #配置101从节点接收端口
重启服务
systemctl restart rsyslog

从节点101配置logstash

编辑配置文件 vi /etc/logstash/conf.d/syslog.conf  //加入如下内容
input {
syslog {
type => "system-syslog"
port => 10514
}
}
output {
elasticsearch {
hosts => ["192.168.32.100:9200"] #配置主从节点ip均可
index => "system-syslog-%{+YYYY.MM}"
}
}
2.检测文件是否正确
cd /usr/share/logstash/bin
./logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit
3.修改文件属组
chown -R logstash:root /var/log/logstash
chown -R logstash:root /var/lib/logstash/
4.配置/etc/rsyslog.conf 传输端口
/etc/rsyslog.conf 传输端口
*.* @@192.168.32.100:10514 #配置100接收端口
重启服务
systemctl restart rsyslog

防火墙放通

关闭防火墙 
systemctl stop firewalld //新手建议直接关闭防火墙
放通端口
firewall-cmd --add-port=9600/tcp --permanent
firewall-cmd --add-port=10514/tcp --permanent
firewall-cmd --reload

启动服务

systemctl enable logstash
systemctl start logstash

logstash配置nginx日志

从节点101安装配置nginx

1.yum安装简单安装nginx
yum install -y nginx
2.配置反向代理 //80端口需检测是否被占用,防火墙是否放通
vi /etc/nginx/conf.d/kibanatest.conf
server {
listen 80;
server_name www.kibanatest.com;

location / {
proxy_pass http://192.168.32.100:5601;
#kibana前台页面ip及端口
index index.html index.htm index.jsp;
}
}
查看配置文件是否正常
nginx -t
启动服务
systemctl enable nginx
systemctl start nginx

配置logstash采集文件 /etc/logstash/conf.d/nginx_access.conf

input{
file{
path => "/var/log/nginx/access.log" #指定logstash检测nginx日志路径
start_position => "beginning"
type => "nginx_access_log"
}
}
filter{
grok{
match => {"message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response:int} (?:-|%{NUMBER:bytes:int}) \"(?:-|%{DATA:referrer})\" \"%{DATA:user_agent}\" (?:%{IP:proxy}|-) %{DATA:upstream_addr} %{NUMBER:upstream_request_time:float} %{NUMBER:upstream_response_time:float}"}
match => {"message" => "%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] \"%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}\" %{NUMBER:response:int} (?:-|%{NUMBER:bytes:int}) \"%{DATA:referrer}\" \"%{DATA:user_agent}\" \"%{DATA:proxy}\""}
}
if [request] {
urldecode {
field => "request"
}
ruby {
init => "@kname = ['url_path','url_arg']"
code => "
new_event = LogStash::Event.new(Hash[@kname.zip(event.get('request').split('?'))])
event.append(new_event)"
}
if [url_arg] {
ruby {
init => "@kname = ['key', 'value']"
code => "event.set('url_args', event.get('url_arg').split('&').collect {|i| Hash[@kname.zip(i.split('='))]})"
}
}
}
geoip{
source => "clientip"
}
useragent{
source => "user_agent"
target => "ua"
remove_field => "user_agent"
}
date {
match => ["timestamp","dd/MMM/YYYY:HH:mm:ss Z"]
locale => "en"
}
mutate{
remove_field => ["message","timestamp","request","url_arg"]
}
}
output{
elasticsearch {
hosts => "192.168.32.101:9200" #本机地址及端口
index => "nginx-access-log-%{+YYYY.MM.dd}"
}#  stdout { #     codec => rubydebug #  }
}

重启服务

测试配置文件
/usr/share/logstash/bin/logstash -t -f /etc/logstash/conf.d/nginx.conf
重启服务
systemctl restart logstash

查看是否有日志收集

curl 'localhost:9200/_cat/indices?v'

Centos7环境ELK搭建_kibana_03

安装配置Beats采集日志

配置yum云或直接wget安装

102上安装filebeat
yum install -y filebeat
或者
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.23-x86_64.rpm
rpm -ivh filebeat-6.8.23-x86_64.rpm

配置filebeat

配置文件
vim /etc/filebeat/filebeat.yml
filebeat.inputs:

- type: log
enabled: true #默认为false,修改为true则启用该配置
paths:
- /var/log/messages #配置采集路径为message日志
#正常情况只需配置enabled: true,paths采集路径,及elasticsearch端口
#就能正常启动采集,账号密码根据是否有安装x-pack自行选择配置。
#以下配置项根据需求配置
fields:
filetype: test1 #自定义字段,用来区分多个类型日志
fields_under_root: true
#如果该选项设置为true,则新增fields成为顶级目录,而不是将其放在fields目录下

#============================= Filebeat modules ===============================

filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false

#==================== Elasticsearch template setting ==========================

setup.template.settings:
index.number_of_shards: 1
#index.codec: best_compression
#_source.enabled: false

#================================ Outputs =====================================
#直接将log数据传输到Elasticsearch
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["localhost:9200"]
username: "elastic"
password: "elastic"

#----------------------------- Logstash output --------------------------------
#将log数据传输到logstash#先启动logstash,不然的话filebeat会找不到logstash的5044端口
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]

启动服务

systemctl enable filebeat
systemctl start filebeat

五、kibana前台页面配置


根据nginx配置的反向代理登录前台页面
www.kibanatest.com
或者直接根据ip:port登录
http://192.168.32.100:5601

创建收集日志

Centos7环境ELK搭建_logstash_04

展示日志收集信息

Centos7环境ELK搭建_centos7_05