ELK日志分析系统

ELK日志分析系统

ELk分别为Elastic Stack 、 Logstash和Kibana , 它们都是开源软件

规划节点

节点IP节点规划主机名
192.168.150.159Elasticsearch+Kibana(主)elk-1
192.168.150.157Elasticsearch+Logstash(数据elk-2
192.168.150.161Elasticsearch(数据)elk-3

使用hostnamectl命令修改主机名用来区分
在这里插入图片描述
配置hosts文件 添加节点与主机名 #3个节点配置相同
在这里插入图片描述
安装JDK

部署ELK环境需要jdk1.8以上的JDK版本软件环境,我们使用opnejdk1.8 全部安装
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

在这里插入图片描述

Elasticserach安装

软件包下载链接

https://mirrors.tuna.tsinghua.edu.cn/elasticstack/6.x/yum/6.0.0/elasticsearch-6.0.0.rpm

三台主机使用wget命令将其下载到/root目录
使用rpm -ivh elasticsearch-6.0.0.rpm 执行安装

参数含义:i表示安装,v表示显示安装过程,h表示显示进度

在这里插入图片描述

配置Elasticserach

配置文件在/etc/elasticsearch/elasticsearch.yml

# Use a descriptive name for your cluster:
cluster.name: ELK  
//配置es的集群名称,默认是elasticsearch,es会自动发现在同一网段下的es,如果在同		一网段下有多个集群,就可以用这个属性来区分不同的集群。

# ------------------------Node -----------------
# Use a descriptive name for the node:
node.name: elk-1	
//节点名,默认随机指定一个name列表中名字,该列表在es的jar包中config文件夹里				name.txt文件中,其中有很多作者添加的有趣名字。
node.master: true	
//指定该节点是否有资格被选举成为node,默认是true,es是默认集群中的第一台机器为	master,如果这台机挂了就会重新选举master。 其他两节点为false
node.data: false	
//指定该节点是否存储索引数据,默认为true。其他两节点为true
# ----------------- Paths ----------------
# Path to directory where to store the data (separate multiple locations by comma):
path.data: /var/lib/elasticsearch 
//索引数据存储位置(保持默认,不要开启注释)
# Path to log files:
path.logs: /var/log/elasticsearch 
//设置日志文件的存储路径,默认是es根目录下的logs文件夹
# --------------- Network ------------------
# Set the bind address to a specific IP (IPv4 or IPv6):
network.host: 192.168.150.157  
//设置绑定的ip地址,可以是ipv4或ipv6的,默认为0.0.0.0。
# Set a custom port for HTTP:
http.port: 9200  
//启动的es对外访问的http端口,默认9200
# For more information, consult the network module documentation.
# --------------------Discovery ----------------
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#discovery.zen.ping.unicast.hosts: ["host1", "host2"]
discovery.zen.ping.unicast.hosts: ["elk-1","elk-2","elk-3"] 
//设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点。

使用cat命令查看
cat /etc/elasticsearch/elasticsearch.yml |grep -v ^# |grep -v ^$
在这里插入图片描述
在这里插入图片描述
通过命令启动es服务,启动后使用ps命令查看进程是否存在或者使用netstat命令查看是否端口启动

systemctl start elasticsearch
ps -ef | grep elasticsearch
netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1446/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1994/master         
tcp6       0      0 192.168.40.11:9200      :::*                    LISTEN      19280/java          
tcp6       0      0 192.168.40.11:9300      :::*                    LISTEN      19280/java          
tcp6       0      0 :::22                   :::*                    LISTEN      1446/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1994/master 
有以上端口或者进程存在,证明es服务启动成功。

使用curl命令检测
在这里插入图片描述
部署Kibana

安装Kibana
通过scrt工具把kibana的rpm包上传至elk-1节点的root的目录下(其他节点不需上传)

wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/6.x/yum/6.0.0/kibana-6.0.0-x86_64.rpm

rpm -ivh kibana-6.0.0-x86_64.rpm

配置Kibana
配置Kibana的配置文件,配置文件在/etc/kibana/kibana.yml,在配置文件增加或修改以下内容:
[root@elk-1 ~]# vi /etc/kibana/kibana.yml
[root@elk-1 ~]# cat /etc/kibana/kibana.yml |grep -v ^#
server.port: 5601
server.host: “192.168.40.11”
elasticsearch.url: “http://192.168.40.11:9200”

启动Kibana
[root@elk-1 ~]# systemctl start kibana
[root@elk-1 ~]# ps -ef |grep kibana
kibana 19958 1 41 11:26 ? 00:00:03 /usr/share/kibana/bin/…/node/bin/node --no-warnings /usr/share/kibana/bin/…/src/cli -c /etc/kibana/kibana.yml
root 19970 19230 0 11:26 pts/0 00:00:00 grep --color=auto kibana
[root@elk-1 ~]# netstat -lntp |grep node
tcp 0 0 192.168.40.11:5601 0.0.0.0:* LISTEN 19958/node

启动成功后网页访问,可以访问到如下界面。

在这里插入图片描述
Logstash部署

使用scrt工具把kibana的rpm包上传至elk-2节点的root的目录下(其他节点不需上传)。

 wget https://mirrors.tuna.tsinghua.edu.cn/elasticstack/6.x/yum/6.0.0/logstash-6.0.0.rpm
 rpm -ivh logstash-6.0.0.0.rpm 

配置Logstash
配置/etc/logstash/logstash.yml,修改增加如下:
[root@elk-2 ~]# vi /etc/logstash/logstash.yml
http.host: “192.168.40.12”
配置logstash收集syslog日志:
[root@elk-2 ~]# vi /etc/logstash/conf.d/syslog.conf
[root@elk-2 ~]# cat /etc/logstash/conf.d/syslog.conf
input {
syslog {
type => “systemlog”
port => 10514
}
}
output {
stdout {
codec => rubydebug
}
}
其中,input定义日志源,
type => “systemlog” 定义类型
output 定义日志输出

检测配置文件是否错误:
[root@elk-2 ~]# ln -s /usr/share/logstash/bin/logstash /usr/bin
创建软连接,方便使用logstash命令

[root@elk-2 ~]# logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit

Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK 

为ok则代表没问题**

	参数解释:
 --path.settings : 用于指定logstash的配置文件所在的目录
 -f : 指定需要被检测的配置文件的路径
 --config.test_and_exit : 指定检测完之后就退出,不然就会直接启动了

打开10514端口,编辑/etc/rsyslog.conf文件,

在#### RULES ####增加一行
*.* @@192.168.150.157:10514
 systemctl restart rsyslog
 ll /var/lib/logstash/  
total 4
drwxr-xr-x. 2 root root      6 Dec  6 15:45 dead_letter_queue
drwxr-xr-x. 2 root root      6 Dec  6 15:45 queue

-rw-r–r--. 1 root root 36 Dec 6 15:45 uuid
修改/var/lib/logstash/目录的所属组为logstash,并重启服务:
chown -R logstash /var/lib/logstash/

启动Logstash 检查配置文件没有问题后,启动Logstash服务:
[root@elk-2 ~]# logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf

上个窗口不要关闭,新建一个窗口,使用命令ps,查看进程
[root@elk-2 ~]#ps -ef |grep logstash

使用netstat命令,查看进程端口10514和9600端口是否已启动:
[root@elk-2 ~]# netstat -lntp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1443/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2009/master         
tcp6       0      0 192.168.40.12:9200      :::*                    LISTEN      19365/java          
tcp6       0      0 :::10514                :::*                    LISTEN      21835/java          
tcp6       0      0 192.168.40.12:9300      :::*                    LISTEN      19365/java          
tcp6       0      0 :::22                   :::*                    LISTEN      1443/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      2009/master         
tcp6       0      0 192.168.40.12:9600      :::*                    LISTEN      21835/java   

让syslog产生日志,用另一台主机登录elk-2机器,登录后退出

[root@elk-3 ~]# ssh elk-2
[root@elk-2 ~]# logout
Connection to elk-2 closed.
会发现,elk2产生日志信息。

此操作只是将日志输出到屏幕上,接下来,我们将日志输出给ES,修改syslog.conf文件。
# vi /etc/logstash/conf.d/syslog.conf

input {
    syslog {
    type => "systemlog"
    port => 10514
}
}
output {
elasticsearch {
  hosts => ["192.168.150.157:9200"]
  index => "system-syslog-%{+YYYY.MM}"
  }
}

接下来启动logstash服务,检查端口是否正常。

# systemctl restart logstash
[root@elk-2 ~]# netstat -ntpl

让syslog产生日志,用另一台主机登录elk-2机器,登录后退出

[root@elk-3 ~]# ssh elk-2
[root@elk-2 ~]# logout
Connection to elk-2 closed.

Kibana上查看日志
之前部署Kibana完成后,还没有检索日志。现在Logstash部署完成,我们回到Kibana服务器上查看日志索引,执行命令如下:

[root@elk-1 ~]# curl '192.168.150.159:9200/_cat/indices?v'
health status index                 uuid                   pri rep docs.count docs.deleted store.size ··pri.store.size
green  open   system-log-2019.12.06 UeKk3IY6TiebNu_OD04YZA   5   1        938            0      816kb        412.2kb
green  open   .kibana               KL7WlNw_T7K36_HSbchBcw   1   1          1            0      7.3kb          3.6kb

获取/删除指定索引详细信息:
[root@elk-1 ~]# curl -XGET/DELETE ‘192.168.150.159:9200/system-log-2020.04.09?pretty’

{
  "system-log-2020.04.09" : {
"aliases" : { },
"mappings" : {
  "systemlog" : {
    "properties" : {
      "@timestamp" : {
        "type" : "date"
      },
      "@version" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      },
      "host" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      },
      "message" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      },
      "path" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      },
      "type" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 256
          }
        }
      }
    }
  }
},
"settings" : {
  "index" : {
    "creation_date" : "1586417513863",
    "number_of_shards" : "5",
    "number_of_replicas" : "1",
    "uuid" : "ETzosODmRA2bksRXxIiabQ",
    "version" : {
      "created" : "6000099"
    },
    "provided_name" : "system-log-2020.04.09"
  }
}
  }
}

Web界面配置
浏览器访问192.168.150.159:5601,到Kibana上配置索引:
在这里插入图片描述
配置完成后,选择Discover,进入“Discover”页面后,如果出现以下提示,则是代表无法查找到日志信息
在这里插入图片描述
这种情况一般是时间的问题,单击右上角信息切换成查看当天的日志信息。由于我虚拟机的时间是19-12-06,所以我要把时间调整到那一天。
在这里插入图片描述
如下图所示现在就正常了:
在这里插入图片描述
Logstash收集Nginx日志

使用wget命令下载Nginx的rpm包并安装

wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.16.1-1.el7.ngx.x86_64.rpm

配置Logstash

elk-2上:编辑Nginx配置文件,加入如下内容:

	[root@elk-2 ~]# vi /etc/logstash/conf.d/nginx.conf,
input {
  file {
   path => "/tmp/elk_access.log"
start_position => "beginning"
type => "nginx"
  }
}
filter {
    grok {
        match => { "message" => "%{IPORHOST:http_host} %{IPORHOST:clientip} - %	{USERNAME:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\" %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}"}
}
geoip {
    source => "clientip"
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
    hosts => ["192.168.40.12:9200"]
index => "nginx-test-%{+YYYY.MM.dd}"
  }
}

使用logstash命令检查文件是否错误:
[root@elk-2 ~]# logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx.conf --config.test_and_exit

Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK

编辑监听Nginx日志配置文件,加入如下内容:

[root@elk-2 ~]# vi /etc/nginx/conf.d/elk.conf 
 server {
        listen 80;
        server_name elk.com;

        location / {
            proxy_pass      http://192.168.40.11:5601;
            proxy_set_header Host   $host;
            proxy_set_header X-Real-IP      $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
        access_log  /tmp/elk_access.log main2;
    }

修改Nginx日志配置文件,增加如下内容(需注意Nginx配置文件格式,在accesslog上方添加以下内容):

[root@elk-2 ~]#vim /etc/nginx/nginx.conf 
log_format main2 '$http_host $remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$upstream_addr" $request_time';
[root@elk-2 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@elk-2 ~]# 
[root@elk-2 ~]# systemctl start nginx
[root@elk-2 ~]# systemctl restart logstash

在/etc/hosts文件和编辑C:\Windows\System32\drivers\etc\hosts文件中添加下面信息:
192.168.150.157 elk.com
在这里插入图片描述
浏览器访问192.168.150.159:5601,到Kibana上配置索引:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
配置完成后,选择Discover,进入“Discover”页面后,如果出现以下提示,则是代表无法查找到日志信息:
在这里插入图片描述
这种情况一般是时间的问题,单击右上角内容切换成查看当天的日志信息,由于我虚拟机的时间是19-12-06,所以我要把时间调整到那一天
在这里插入图片描述
在这里插入图片描述

使用Beats采集日志

.安装Beats
在elk-3主机上下载和安装Beats:
[root@elk-3 ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.0-x86_64.rpm

[root@elk-3 ~]# rpm -ivh filebeat-6.0.0-x86_64.rpm
2. 配置Beats
编辑配置文件:

 [root@elk-3 ~]#  vim /etc/filebeat/filebeat.yml 
filebeat.prospectors:
  #enabled: false //注释掉该参数
  paths:
- /var/log/elasticsearch/elk.log	//此处可自行改为想要监听的日志文件
output.elasticsearch:
  hosts: ["192.168.40.11:9200"]
  [root@elk-3 ~]#  systemctl start  filebeat
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210331172157443.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTgwNjQzNA==,size_16,color_FFFFFF,t_70)

在这里插入图片描述

在elk-1主机上使用curl '192.168.40.11:9200/_cat/indices?v’命令查看是否监听到elk-3主机上的日志(出现filebeat字样表示成功)
在这里插入图片描述

  1. Web界面配置
    按照上一个步骤在浏览器中添加filebeat日志文件的监控。

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值