构建企业级日志分析系统-ELK

一、ELK介绍

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

1.Elasticsearch

   Elasticsearch是基于json的分布式搜索和分析引擎,专为实现水平扩展、高可靠性和管理便捷性而设计。Elasticsearch是一个分布式的RESTful风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。它是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

2. Logstash

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

3. Kibana

    Kibana能够以图表的形式呈现数据,并且具有可扩展的用户界面,供全方位配置和管理Elastic Stack。它是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

4. Beats

    Beats是轻量型采集器的平台,从边缘机器向Logstash和Elasticsearch发送数据。Beats是数据采集的得力工具,将这些采集器安装在服务器中,他们就会把数据汇总到Elasticsearch。如果需要更强大的处理性能,Beats还能将数据输送到Logstash进行转换和解析。

   Beats系列—全品类采集器指定所有数据类型,不同数据类型的收集使用不同的插件

    

5. 架构

二、实现一个基本的日志收集——收集系统日志rsyslog

1. 实现原理

1)通过rsyslog收集本机所有日志

2)filebeat拿日志给elasticsearch

3)elasticsearch分析日志

4)elasticsearch将分析结果给kibana

2. rsyslog的介绍

    Linux的日志记录了用户在系统上的一切操作,看日志去分析系统的状态是运维人员必须掌握的基本功。rsyslog日志服务器的优势:1)日志统一,集中式管理;2)日志实时发送到一个更加安全的远端服务器上,真正记录用户行为,使日志的2次更改可能性大大降低,从而能够对日志进行真实回放,便于问题追踪。

    rsyslog的新功能:rsyslog是一个加强版的syslog,具有各种各样的新功能:如,直接将日志写入到数据库;日志队列(内存队列和磁盘队列);灵活的模板机制;可以得到更多输出格式;插件式结构,多种多样的输入,输出模块;可以把日志存放在Mysql,PostgreSQL,Oracle等数据库中。

3. rsyslog配置

1)安装:

[root@web01 ~]# yum install rsyslog -y

2)配置文件

rsyslog.conf中日志规则的定义格式

facitility.priority Target

facitility:日志设备(可以理解为日志类型)

------------------------------------------------------------

auth                         #pam产生的日志,认证日志

authpriv                   #ssh,ftp等登录信息的认证信息,认证授权认证

cron                         #时间任务相关

kern                         #内核

lpr                            #打印

mail                         #邮件

-----------------------------------------------------------------

priority:级别日志级别

-----------------------------------------------------------------

debug                                      #有调试信息的,日志信息最多

info                                          #一般信息的日志,最常用

notice                                      #最具有重要性的普通条件的信息

warning,warn                       #警告级别

err,error                               #错误级别,阻止某个功能或者模块不能正常工作的信息。

crit                                          #严重级别,阻止整个系统或者整个软件不能正常工作的信息

alert                                        #需要立刻修改的信息

emerg,panic                        #内核崩溃等严重信息

------------------------------------------------------------------------------

Target:日志的处理方式

#文件                             如/var/log/messages

#用户                            root, *(表示所有用户)

#日志服务器                 @172.16.22.1

#管道                            | COMMAND

3)修改配置文件

[root@web01 ~]# vim /etc/rsyslog.conf 
[root@web01 ~]# grep -Ev "^$|^#" /etc/rsyslog.conf 
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
##设置服务协议和端口 $ModLoad imudp $UDPServerRun
514 $WorkDirectory /var/lib/rsyslog $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $IncludeConfig /etc/rsyslog.d/*.conf $OmitLocalLogging on $IMJournalStateFile imjournal.state *.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg :omusrmsg:* uucp,news.crit /var/log/spooler local7.* /var/log/boot.log
##收集日志的方式 *.* /var/log/testinfo.log

4)启动服务

[root@web01 ~]# systemctl start rsyslog
[root@web01 ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
   Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2020-10-21 16:45:53 CST; 12min ago
     Docs: man:rsyslogd(8)
           http://www.rsyslog.com/doc/
 Main PID: 6407 (rsyslogd)
   CGroup: /system.slice/rsyslog.service
           └─6407 /usr/sbin/rsyslogd -n

Oct 21 16:45:53 web01 systemd[1]: Starting System Logging Service...
Oct 21 16:45:53 web01 rsyslogd[6407]:  [origin software="rsyslogd" swVersion="8.24.0-52.el7_8.2" x-pid="6407" x-info="http://ww...] start
Oct 21 16:45:53 web01 systemd[1]: Started System Logging Service.
Hint: Some lines were ellipsized, use -l to show in full.

5)测试

[root@web01 ~]# touch /var/log/testinfo.log
[root@web01 ~]# logger "rsyslog test from info"
[root@web01 ~]# grep "rsyslog test" /var/log/testinfo.log
Oct 21 17:00:48 web01 root: rsyslog test from info

三、ELK安装

1. jdk安装

下载jdk的安装包,下载页面:

https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html

下载安装

[root@web01 tools]# ll
total 20288
drwxr-xr-x 17 test test     4096 Sep 20 14:27 Python-3.5.5
-rw-r--r--  1 root root 20766931 Jul 16 21:35 Python-3.5.5.tgz
[root@web01 tools]# rz

[root@web01 tools]# ll
total 195556
-rw-r--r--  1 root root 179472367 May 19 20:30 jdk-8u251-linux-x64.rpm
drwxr-xr-x 17 test test      4096 Sep 20 14:27 Python-3.5.5
-rw-r--r--  1 root root  20766931 Jul 16 21:35 Python-3.5.5.tgz
[root@web01 tools]# rpm -ivh jdk-8u251-linux-x64.rpm 
warning: jdk-8u251-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:jdk1.8-2000:1.8.0_251-fcs        ################################# [100%]
Unpacking JAR files...
    tools.jar...
    plugin.jar...
    javaws.jar...
    deploy.jar...
    rt.jar...
    jsse.jar...
    charsets.jar...
    localedata.jar...

设置环境变量

[root@web01 ~]# vim /etc/profile
[root@web01 ~]# tail /etc/profile
unset i
unset -f pathmunge
export TMOUT=300
export HISTSIZE=1000
export HISTFILESIZE=1000
export HISTTIMEFORMAT="`whoami` %F %T"
JAVA_HOME=/usr/java/jdk1.8.0_251-amd64
PATH=$JAVA_HOME/bin:$PATH:$HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH JAVA_HOME CLASSPATH CATALINA_HOME

生效

[root@web01 ~]# source /etc/profile

验证

[root@web01 ~]# java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

2. beats日志搜集器

Beats组件:

Packetbeat(搜集网络流量数据)

Topbeat(搜集系统,进程和文件系统级别的CPU和内存使用情况等数据)

Filebeat(搜集文件数据)

Winlogbeat(搜集Windows事件日志数据)

官网地址:https://www.elastic.co/cn/

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

安装指南:https://www.elastic.co/guide/en/elasticsearch/reference/6.x/rpm.html

软件下载:https://www.elastic.co/cn/downloads/

1)yum源设置

导入KEY文件

[root@web01 ~]# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

设置yun源

[root@web01 ~]# vim  /etc/yum.repos.d/elastic.repo 
[root@web01 ~]# cat /etc/yum.repos.d/elastic.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

2)安装filebeat

[root@web01 ~]# yum install filebeat -y

3)配置文件

[root@web01 ~]# vim /etc/filebeat/filebeat.yml 
[root@web01 ~]# egrep -v "#|^$" /etc/filebeat/filebeat.yml 
filebeat.inputs:
- type: log            #类型为日志
  enabled: true
  paths:
    - /var/log/testinfo.log
  include_lines: ['^ERR','^WARN','sshd']  #优化日志收集
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 3
setup.kibana:
output.elasticsearch:   #输出
  hosts: ["10.0.0.7:9200"]
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

4)启动filebeat

[root@web01 ~]# systemctl restart filebeat
[root@web01 ~]# systemctl status filebeat.service 
● filebeat.service - Filebeat sends log files to Logstash or directly to Elasticsearch.
   Loaded: loaded (/usr/lib/systemd/system/filebeat.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-10-21 21:28:43 CST; 4s ago
     Docs: https://www.elastic.co/products/beats/filebeat
 Main PID: 12128 (filebeat)
   CGroup: /system.slice/filebeat.service
           └─12128 /usr/share/filebeat/bin/filebeat -c /etc/filebeat/fi...

Oct 21 21:28:43 web01 systemd[1]: Started Filebeat sends log files to ....
Hint: Some lines were ellipsized, use -l to show in full.

3. elasticsearch部署

1)elasticsearch安装

[root@web01 ~]# yum install -y elasticsearch

2)修改配置文件

[root@web01 ~]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
[root@web01 ~]# vim /etc/elasticsearch/elasticsearch.yml
[root@web01 ~]# egrep -v "#|^$" /etc/elasticsearch/elasticsearch.yml
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200

3)启动

[root@web01 ~]# /bin/systemctl daemon-reload 
[root@web01 ~]# systemctl status elasticsearch.service 
● elasticsearch.service - Elasticsearch
   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-10-21 21:41:49 CST; 6s ago
     Docs: http://www.elastic.co
 Main PID: 13009 (java)
    Tasks: 4
   Memory: 498.2M
   CGroup: /system.slice/elasticsearch.service
           └─13009 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupanc...

Oct 21 21:41:49 web01 systemd[1]: Started Elasticsearch.
[root@web01 ~]# netstat -lntup
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      6406/sshd           
tcp6       0      0 :::9200                 :::*                    LISTEN      13009/java          
tcp6       0      0 :::9300                 :::*                    LISTEN      13009/java          
tcp6       0      0 :::22                   :::*                    LISTEN      6406/sshd           
udp        0      0 0.0.0.0:514             0.0.0.0:*                           6596/rsyslogd       
udp6       0      0 :::514                  :::*                                6596/rsyslogd       

4)测试

[root@web01 ~]# curl http://10.0.0.7:9200/
{
  "name" : "mQZoCGD",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "jfrASbZhRUyXyDfE4n71rw",
  "version" : {
    "number" : "6.8.12",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "7a15d2a",
    "build_date" : "2020-08-12T07:27:20.804867Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.3",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

浏览器测试

4. kibana部署

1)kibana安装

[root@web01 ~]# yum install kibana -y

2)修改配置文件

[root@web01 ~]# cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bak
[root@web01 ~]# vim /etc/kibana/kibana.yml
[root@web01 ~]# egrep -v "#|^$" /etc/kibana/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://10.0.0.7:9200"]

3)kibana启动

[root@web01 ~]# systemctl daemon-reload
[root@web01 ~]# systemctl start kibana.service 
[root@web01 ~]# systemctl status kibana.service 
● kibana.service - Kibana
   Loaded: loaded (/etc/systemd/system/kibana.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2020-10-21 22:10:43 CST; 7s ago
 Main PID: 14739 (node)
    Tasks: 11
   Memory: 157.5M
   CGroup: /system.slice/kibana.service
           └─14739 /usr/share/kibana/bin/../node/bin/node --no-warnings --max-http-header-size=65536 /usr/share/kibana/bin/../src/cli ...

Oct 21 22:10:43 web01 systemd[1]: Started Kibana.
[root@web01 ~]# netstat -lntup
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      6406/sshd           
tcp        0      0 0.0.0.0:5601            0.0.0.0:*               LISTEN      14739/node          
tcp6       0      0 :::9200                 :::*                    LISTEN      13009/java          
tcp6       0      0 :::9300                 :::*                    LISTEN      13009/java          
tcp6       0      0 :::22                   :::*                    LISTEN      6406/sshd           
udp        0      0 0.0.0.0:514             0.0.0.0:*                           6596/rsyslogd       
udp6       0      0 :::514                  :::*                                6596/rsyslogd       

4)设置kibana web页面,查看数据收集

在浏览器上输入:http://10.0.0.7:5601

测试ssh连接,查看是否有日志记录

posted @ 2020-10-21 23:03  出水芙蓉·薇薇  阅读(508)  评论(0编辑  收藏  举报