ELK介绍

  • Elast icsearch:数据库,存数据 JAVA
  • Logstash:收集日志,过滤数据 JAVA
  • Kibana:分析,过滤,展示 JAVA
  • Filebeat:收集日志,传输到Elasticsearch GO

日志收集分类

  • 代理层:nginx,haproxy
  • web层:nginx
  • db层:mysql,redis,mongodb,elasticsearch
  • 安装部署:es,kibana,nginx,filebeat

安装产品

  • db01: 2G-4G内存,安装es,kibana,nginx,filebeat

官方演示地址

安装部署ELK

安装配置java

#yum安装
yum install java-1.8.0-openjdk.x86_64 -y
#查看版本
java -version

同步时间

yum install ntpdate -y
ntpdate time1.aliyun.com

安装配置elasticsearch

  • 受log4j漏洞影响,不要在生产环境使用该版本
  • 受log4j漏洞影响,不要在生产环境使用该版本
  • 受log4j漏洞影响,不要在生产环境使用该版本
#db01
### 下载安装软件
mkdir -p /data/es_soft/
cd /data/es_soft/
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.rpm
rpm -ivh elasticsearch-6.6.0.rpm
### 配置启动
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
systemctl status elasticsearch.service
### 检查是否启动成功
ps -ef|grep elastic
lsof -i:9200
netstat -luntp|grep 9200
tail -f /var/log/elasticsearch/elasticsearch.log

修改配置文件如下

vi /etc/elasticsearch/elasticsearch.yml

node.name: node-1
path.data: /data/elasticsearch
path.logs: /var/log/elasticsearch
bootstrap.memory_lock: true
network.host: 10.0.0.51,127.0.0.1
http.port: 9200

修改参数

systemctl edit elasticsearch.service

[Service]
LimitMEMLOCK=infinity

#重启服务
systemctl daemon-reload
systemctl restart elasticsearch
#检查是否启动成功
ps -ef|grep elastic
lsof -i:9200
netstat -luntp|grep 9200
tail -f /var/log/elasticsearch/elasticsearch.log

安装配置es-head插件

以谷歌浏览器为例,打开以下地址(所有chrome内核的浏览器都适用)

#扩展程序
chrome://extensions/

b04fe21a882d2e69d19536c6d6618e11.jpg

  • 开启开发者模式,将解压以后的文件夹导入,浏览器地址栏结尾处会出现图标点击使用
  • es-head-0.1.4_0.crx.zip

cc139b3ce4b3eeb660e530caaf099723.jpg

  • 连接成功

67b8ce15ac0bc42e2fe583154a4ff927.png

安装配置kibana

  • 受log4j漏洞影响,不要在生产环境使用该版本
  • 受log4j漏洞影响,不要在生产环境使用该版本
  • 受log4j漏洞影响,不要在生产环境使用该版本
#db01
### 下载安装软件
mkdir -p /data/es_soft/
cd /data/es_soft/
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.0-x86_64.rpm
rpm -ivh kibana-6.6.0-x86_64.rpm

修改配置文件如下

vi /etc/kibana/kibana.yml

server.port: 5601
server.host: "10.0.0.51"
server.name: "db01"
elasticsearch.hosts: ["http://10.0.0.51:9200"]
kibana.index: ".kibana"
#6.7版本以后可以设置语言为简体中文
i18n.locale: "zh-CN"

启动kibana

#启动后浏览器访问该服务器的5601端口
systemctl start kibana.service
systemctl status kibana.service
netstat -lntup|grep 5601

安装配置nginx

#配置repos源
vi /etc/yum.repos.d/nginx.repo

[nginx-stabLe]
name=nginx stable repo
baseurL=http://nginx.org/packages/centos/$reLeasever/$basearch/
gpgcheck=1
enabLed=1
gpgkey=https://nginx.org/keys/nginx_signing.key

[nginx-maintine] 
name=nginx maintine repo
baseurl=http://nginx org/packages/maintine/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

安装nginx和httpd-tools

yum安装
yum install nginx httpd-tools -y
#启动nginx
systemctl start nginx
#压力测试
ab -n 100 -c 100 http://10.0.0.51/
#查看日志
tail -f /var/log/nginx/access.log

安装配置filebeat

  • 受log4j漏洞影响,不要在生产环境使用该版本

  • 受log4j漏洞影响,不要在生产环境使用该版本

  • 受log4j漏洞影响,不要在生产环境使用该版本

  • filebeat-6.6.0-x86_64.rpm

#db01
### 下载安装软件
mkdir -p /data/es_soft/
cd /data/es_soft/
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.0-x86_64.rpm
rpm -ivh filebeat-6.6.0-x86_64.rpm

备份配置文件

cd /etc/filebeat/
cp filebeat.yml{,.bak}

filebeat配置日志收集

#修改配置文件
vi filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
output.elasticsearch:
  hosts: ["10.0.0.51:9200"]

#启动服务
systemctl start filebeat.service

查看elasticsearch,kibana创建索引

可以在es-head查看到数据

QQ截图20200601210533.png

kibana创建索引

QQ截图20200601210504.png

选择索引

QQ截图20200601210646.png

选择第一个,等待创建完成

QQ截图20200601210838.png

可以查看到日志的数据

QQ截图20200601211126.png

点击选项的add按钮过滤字段

QQ截图20200601211212.png

查看效果

QQ截图20200601211428.png

可以通过搜索添加条件来过滤数据

QQ截图20200601211745.png

配置filebeat收集普通日志

修改nginx日志为json格式

vi /etc/nginx/nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
#添加json日志格式
    log_format json '{ "time_local": "$time_local", '
                           '"remote_addr": "$remote_addr", '
                           '"referer": "$http_referer", '
                           '"request": "$request", '
                           '"status": $status, '
                           '"bytes": $body_bytes_sent, '
                           '"agent": "$http_user_agent", '
                           '"x_forwarded": "$http_x_forwarded_for", '
                           '"up_addr": "$upstream_addr",'
                           '"up_host": "$upstream_http_host",'
                           '"upstream_time": "$upstream_response_time",'
                           '"request_time": "$request_time"'
    ' }';


#    access_log  /var/log/nginx/access.log  main;
#修改为json格式日志
    access_log  /var/log/nginx/access.log  json;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

重启nginx查看日志格式是否改变

#重启
systemctl restart nginx
#清空日志
> /var/log/nginx/access.log
#访问100次nginx
ab -n 100 -c 100 http://10.0.0.51/
#查看日志
tail -f /var/log/nginx/access.log

收集日志创建对应的索引

修改配置文件

vi /etc/filebeat/filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  json.keys_under_root: true
  json.overwrite_keys: true

output.elasticsearch:
  hosts: ["10.0.0.51:9200"]

删除数据

  • Elasticsearch

QQ截图20200601214819.png

  • kibana

QQ截图20200601214859.png

重启filebeat,制造日志

#重启
systemctl restart filebeat
#制造日志
ab -n 100 -c 100 http://10.0.0.51/

查看数据

  • 数据已经拥有对应的字段

QQ截图20200601215515.png

重复之前kibana创建索引的步骤重新创建索引后

QQ截图20200601215959.png

filebeat修改默认索引模版

修改配置文件

vi /etc/filebeat/filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  json.keys_under_root: true
  json.overwrite_keys: true

output.elasticsearch:
  hosts: ["10.0.0.51:9200"]
  index: "nginx-%{[beat.version]}-%{+yyyy.MM}"
#不添加以下参数会产生报错
setup.template.name: "nginx"
setup.template.pattern: "nginx-*"
setup.template.enabled: false
setup.template.overwrite: true

报错内容

2020-06-01T22:05:19.920+0800    ERROR   instance/beat.go:911    Exiting: setup.template.name and setup.template.pattern have to be set if index name is modified

删除elasticsearch,kibana数据,重启filebeat

#重启
systemctl restart filebeat.service 
#生成新的日志
ab -n 100 -c 100 http://10.0.0.51/

QQ截图20200601221654.png

重复之前kibana创建索引的步骤重新创建索引后

  • 只剩配置的参数,隐藏了默认模版的大量参数

QQ截图20200601221756.png