弹性堆栈(以前称为ELK堆栈)是由以下公司生产的开​​源软件的集合 有弹性 它使您可以搜索,分析和可视化从任何来源以任何格式生成的日志,这种做法称为集中式日志记录。集中式日志记录在尝试确定服务器或应用程序出现问题时非常有用,因为它使您可以在一个地方搜索所有日志。它也很有用,因为它使您可以通过在特定时间段内关联多个服务器的日志来确定跨多个服务器的问题。

弹性堆栈具有四个主要组件:

  • 弹性搜索:分布式 RESTful的 搜索引擎,用于存储所有收集的数据。
  • Logstash:Elastic Stack的数据处理组件,用于将传入数据发送到Elasticsearch。
  • 基巴纳 :用于搜索和可视化日志的Web界面。
  • 节拍 :轻型,单一用途的数据传送器,可以将成百上千台机器中的数据发送到Logstash或Elasticsearch。

总之,这些不同的组件最常用于监视,故障排除和保护IT环境(尽管ELK Stack的使用案例更多,例如商业智能和Web分析)。 节拍 和Logstash负责数据收集和处理,Elasticsearch索引并存储数据,而Kibana提供了用于查询数据和可视化数据的用户界面。

下载并准备安装软件包

有两种安装ELK堆栈的方法。一种方法是从网上下载所有软件包,如下所示,然后在本地安装。

https: //万维网 。弹性 .co /下载


http://www.oracle.com/technetwork/java/javase/downloads/index.html

  • wget //download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.4/elasticsearch-2.3.4.tar.gz
  • wget //download.elastic.co/logstash/logstash/logstash-2.3.4.tar.gz
  • wget //download.elastic.co/kibana/kibana/kibana-4.5.3-linux-x64.tar.gz
  • wget –no-cookies –no-check-certificate –header “Cookie: oraclelicense=accept-securebackup-cookie” //download.oracle.com/otn-pub/java/jdk/13.0.1+9/cec27d702aa74d5a8630c65ae61e4305/jdk-13.0.1_linux-x64_bin.tar.gz -O jdk-8-linux-x64.tar.gz

对于JDK下载,您可以使用从Oracle JDK下载链接中找到的字符串替换“ cec27d702aa74d5a8630c65ae61e4305”。

[[电子邮件 protected] 〜]#ls -l
总计137456
-rw-r–r–。 1 root root 27547169 5月16日 2018年Elasticsearch-2.3.4.tar.gz
-rw-r–r–。 1个根     5307 Mar 20 2012年jdk-8u45-linux-x64.tar.gz
-rw-r–r–。 1 root root 33414498 5月16日 2018年kibana-4.5.3-linux-x64.tar.gz
-rw-r–r–。 1个根 79779303 May 16 2018年logstash-2.3.4.tar.gz

在这篇文章中,我将向您展示如何使用Yum安装所有这些组件,而无需先下载它们。

先决条件

 

  • 通过以下步骤设置一台CentOS 7服务器 使用CentOS 7进行初始服务器设置,包括具有sudo权限的非root用户和 防火墙。 有弹性 Stack服务器所需的CPU,RAM和存储量取决于您打算收集的日志量。出于实验室目的,我们将为Elastic Stack服务器使用具有以下规范的VPS:
    • 作业系统:CentOS 7.5
    • 内存:4GB
    • CPU: 2
  • 服务器上安装了Java 8(Elasticsearch和Logstash必需)。请注意,不支持Java 9。 
  • Nginx安装在您的服务器上,您将在本指南的后面部分将其配置为Kibana的反向代理。  

 

安装JDK 8 JRE& JDK

须藤百胜安装java-1.8.0-openjdk
须藤百胜安装java-1.8.0-openjdk-devel

注意: //www.digitalocean.com/community/tutorials/how-to-install-java-on-centos-and-fedora#install-openjdk-8

安装Nginx

sudo yum安装epel-release
须藤yum安装nginx

sudo systemctl启动nginx
sudo systemctl启用nginx

禁用防火墙

[[电子邮件 protected] 〜]#systemctl停止firewalld
[[电子邮件 protected] 〜]#systemctl禁用firewalld.service
删除了符号链接/etc/systemd/system/multi-user.target.wants/firewalld.service。
删除了symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service。
[[电子邮件 protected] 〜]#sudo systemctl mask –现在firewalld
创建了从/etc/systemd/system/firewalld.service到/ dev / null的符号链接。

安装ElasticSearch

[[电子邮件 protected] 〜]# sudo rpm –import //artifacts.elastic.co/GPG-KEY-elasticsearch
[[电子邮件 protected] 〜]#sudo vi /etc/yum.repos.d/elasticsearch.repo

/etc/yum.repos.d/elasticsearch.repo
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=//artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=//artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

[[电子邮件 protected] 〜]#sudo yum install elasticsearch

/etc/elasticsearch/elasticsearch.yml
. . .
network.host: localhost
. . .

 

启动ElasticSearch

[[电子邮件 protected] 〜]#sudo vi /etc/elasticsearch/elasticsearch.yml
[[电子邮件 protected] 〜]#sudo systemctl启动elasticsearch
[[电子邮件 protected] 〜]#sudo systemctl启用elasticsearch
创建了从/etc/systemd/system/multi-user.target.wants/elasticsearch.service到/usr/lib/systemd/system/elasticsearch.service的符号链接。

测试ES

[[电子邮件 protected] 〜]#curl -X GET“本地主机:9200”
curl:(7)无法连接到本地主机:9200;拒绝连接

[[电子邮件 protected] 〜]#curl -X GET“ 127.0.0.1:9200”
{
“名称”:“ 9Vq4-ng”,
“ cluster_name”:“ elasticsearch”,
“ cluster_uuid”:“ bOf93iLYSyqRkijrdHLbyw”,
“版本”:{
“数字”:“ 6.8.3”,
“ build_flavor”:“默认”,
“ build_type”:“ rpm”,
“ build_hash”:“ 0c48c0e”,
“ build_date”:“ 2019-08-29T19:05:24.312154Z”,
“ build_snapshot”:否,
“ lucene_version”:“ 7.7.0”,
“ minimum_wire_compatibility_version”:“ 5.6.0”,
“ minimum_index_compatibility_version”:“ 5.0.0”
},
“标语”:“您知道,要搜索”
}

[[电子邮件 protected] 〜]#服务nginx重新启动
重定向到/ bin / systemctl重新启动nginx.service
[[电子邮件 protected] 〜]#curl -X GET“本地主机:9200”
{
  “名称”:“ 9Vq4-ng”,
 “ cluster_name”:“ elasticsearch”,
 “ cluster_uuid”:“ bOf93iLYSyqRkijrdHLbyw”,
  “版本”:{
    “数字”:“ 6.8.3”,
   “ build_flavor”:“默认”,
   “ build_type”:“ rpm”,
   “ build_hash”:“ 0c48c0e”,
   “ build_date”:“ 2019-08-29T19:05:24.312154Z”,
   “ build_snapshot”:否,
   “ lucene_version”:“ 7.7.0”,
   “ minimum_wire_compatibility_version”:“ 5.6.0”,
   “ minimum_index_compatibility_version”:“ 5.0.0”
  },
 “标语”:“您知道,要搜索”
}

[[电子邮件 protected] 〜]#netstat -tunnpl
活动的Internet连接(仅服务器)
Proto Recv-Q Send-Q本地地址           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2842/master
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1 /系统
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      12181/nginx: master
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3139/sshd
tcp6       0      0 ::1:25                  ::: *                    听      2842/master
tcp6       0      0 :::111                  ::: *                    听      1 /系统
tcp6       0      0 ::1:9200                ::: *                    听      12526/java
tcp6       0      0 127.0.0.1:9200          ::: *                    听      12526/java
tcp6       0      0 :::80                   :::*                    听      12181/nginx: master
tcp6       0      0 ::1:9300                ::: *                    听      12526/java
tcp6       0      0 127.0.0.1:9300          ::: *                    听      12526/java
tcp6       0      0 :::22                   :::*                    听      3139/sshd
udp        0      0 0.0.0.0:68              0.0.0.0:*                           2521/dhclient
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1/systemd
udp        0      0 127.0.0.1:323           0.0.0.0:*                           2050/chronyd
udp        0      0 0.0.0.0:927             0.0.0.0:*                           2028/rpcbind
udp6       0      0 :::111                  ::: *                                1 /系统
udp6       0      0 ::1:323                 :::*                                2050 /年代
udp6       0      0 :::927                  ::: *                                2028 / rpcbind
[[电子邮件 protected] 〜]#

安装并启动Kibana

sudo yum install kibana

sudo systemctl启用kibana
sudo systemctl启动kibana

配置Kibana

首先,使用 openssl 命令来创建Kibana管理用户,您将使用该用户访问Kibana网络界面。 

回声“kibanaadmin:`openssl passwd -apr1`” | sudo tee -a /etc/nginx/htpasswd.users

接下来,我们将创建一个Nginx服务器块文件。例如,我们将这个文件称为  麋鹿 .co nf
sudo vi /etc/nginx/conf.d/ 麋鹿 .co nf
This code configures Nginx to direct your server’s HTTP traffic to the 基巴纳 application, which is listening 上  localhost:5601。此外,它将Nginx配置为读取 htpasswd.users 文件并要求基本身份验证。 150.136.225.194是您的ELK VM的公共IP。如果您没有FQDN,则可以使用Ngnix的public ip来收听您的ELK网站。

麋鹿 .conf”>/etc/nginx/conf.d/ 麋鹿 .co nf
server {
    listen 80;

    server_name 150.136.225.194;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/htpasswd.users;

    location / {
        proxy_pass http://localhost:5601;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

 

测试基巴纳

须藤Nginx -t

sudo systemctl重启nginx

默认情况下,SELinux安全策略设置为强制执行。运行以下命令以允许Nginx访问代理服务:
须藤setsebool httpd_can_network_connect 1 -P

http://150.136.225.194/status
它将提示您一个窗口询问您的用户名和密码。用户名是我们之前配置的用户名: kibanaadmin

安装Logstash

须藤百胜安装logstash

配置Logstash

[[电子邮件 protected] 〜]#须藤vi /etc/logstash/conf.d/02-beats-input.conf
[[电子邮件 protected] 〜]#
[[电子邮件 protected] 〜]#
[[电子邮件 protected] 〜]#sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf
[[电子邮件 protected] 〜]#sudo -u logstash / usr / share / logstash / bin / logstash –path.settings / etc / logstash -t

将Logstash日志发送到/ var / log / logstash,该日志现在通过log4j2.properties配置

[2019-10-22T01:45:28,603] [INFO] [logstash.setting.writabledirectory]创建目录{:setting =>”path.queue”, :path=>” / var / lib / logstash / queue”}

[2019-10-22T01:45:28,625] [INFO] [logstash.setting.writabledirectory]创建目录{:setting =>” path.dead_letter_queue”,:path =>” / var / lib / logstash / dead_letter_queue”}

配置OK

[2019-10-22T01:45:37,738] [INFO] [logstash.runner]使用config.test_and_exit模式。配置验证结果:确定。退出Logstash

[[电子邮件 protected] 〜]#

创建一个名为02-beats-input.conf的配置文件,在其中设置Filebeat输入:

须藤vi /etc/logstash/conf.d/02-beats-input.conf

插入以下输入配置。这指定了一个节拍输入,它将在TCP端口5044上侦听。

/etc/logstash/conf.d/02-beats-input.conf
input {
  beats {
    port => 5044
  }
}

接下来,创建一个名为10-syslog-filter.conf的配置文件,它将为系统日志(也称为syslogs)添加一个过滤器:
须藤vi /etc/logstash/conf.d/10-syslog-filter.conf

/etc/logstash/conf.d/10-syslog-filter.conf
filter {
  if [fileset][module] == "system" {
    if [fileset][name] == "auth" {
      grok {
        match => { "message" => ["%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} %{DATA:[system][auth][ssh][method]} for (invalid user )?%{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]} port %{NUMBER:[system][auth][ssh][port]} ssh2(: %{GREEDYDATA:[system][auth][ssh][signature]})?",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: %{DATA:[system][auth][ssh][event]} user %{DATA:[system][auth][user]} from %{IPORHOST:[system][auth][ssh][ip]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sshd(?:\[%{POSINT:[system][auth][pid]}\])?: Did not receive identification string from %{IPORHOST:[system][auth][ssh][dropped_ip]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} sudo(?:\[%{POSINT:[system][auth][pid]}\])?: \s*%{DATA:[system][auth][user]} :( %{DATA:[system][auth][sudo][error]} ;)? TTY=%{DATA:[system][auth][sudo][tty]} ; PWD=%{DATA:[system][auth][sudo][pwd]} ; USER=%{DATA:[system][auth][sudo][user]} ; COMMAND=%{GREEDYDATA:[system][auth][sudo][command]}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} groupadd(?:\[%{POSINT:[system][auth][pid]}\])?: new group: name=%{DATA:system.auth.groupadd.name}, GID=%{NUMBER:system.auth.groupadd.gid}",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} useradd(?:\[%{POSINT:[system][auth][pid]}\])?: new user: name=%{DATA:[system][auth][user][add][name]}, UID=%{NUMBER:[system][auth][user][add][uid]}, GID=%{NUMBER:[system][auth][user][add][gid]}, home=%{DATA:[system][auth][user][add][home]}, shell=%{DATA:[system][auth][user][add][shell]}$",
                  "%{SYSLOGTIMESTAMP:[system][auth][timestamp]} %{SYSLOGHOST:[system][auth][hostname]} %{DATA:[system][auth][program]}(?:\[%{POSINT:[system][auth][pid]}\])?: %{GREEDYMULTILINE:[system][auth][message]}"] }
        pattern_definitions => {
          "GREEDYMULTILINE"=> "(.|\n)*"
        }
        remove_field => "message"
      }
      date {
        match => [ "[system][auth][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
      }
      geoip {
        source => "[system][auth][ssh][ip]"
        target => "[system][auth][ssh][geoip]"
      }
    }
    else if [fileset][name] == "syslog" {
      grok {
        match => { "message" => ["%{SYSLOGTIMESTAMP:[system][syslog][timestamp]} %{SYSLOGHOST:[system][syslog][hostname]} %{DATA:[system][syslog][program]}(?:\[%{POSINT:[system][syslog][pid]}\])?: %{GREEDYMULTILINE:[system][syslog][message]}"] }
        pattern_definitions => { "GREEDYMULTILINE" => "(.|\n)*" }
        remove_field => "message"
      }
      date {
        match => [ "[system][syslog][timestamp]", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
      }
    }
  }
}

最后,创建一个名为30-elasticsearch-output.conf的配置文件:

sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

插入以下输出配置。此输出将Logstash配置为将Beats数据存储在以``Beat''命名的索引中的,以localhost:9200运行的Elasticsearch中。本教程中使用的Beat是Filebeat:

/etc/logstash/conf.d/30-elasticsearch-output.conf
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    manage_template => false
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}

使用以下命令测试您的Logstash配置:
sudo -u logstash / usr / share / logstash / bin / logstash –path.settings / etc / logstash -t


如果没有语法错误,您的输出将显示 Configruation OK after a few seconds. 







须藤systemctl启动logstash
sudo systemctl启用logstash



安装和配置Filebeat

有弹性 Stack使用称为Beats的多个轻量级数据托运人从各种来源收集数据并将其传输到Logstash或Elasticsearch。以下是Elastic当前提供的Beats:
  • 文件拍:收集并发送日志文件。
  • 公制节拍:从您的系统和服务中收集指标。
  • 包拍:收集和分析网络数据。
  • Winlogbeat:收集Windows事件日志。
  • 审核信号:收集Linux审核框架数据并监视文件完整性。
  • 心跳:通过主动探测来监视服务的可用性。

sudo yum安装filebeat



须藤vi /etc/filebeat/filebeat.yml

/etc/filebeat/filebeat.yml

 

...
#output.elasticsearch:
  # Array of hosts to connect to.
  #hosts: ["localhost:9200"]
...
/etc/filebeat/filebeat.yml
output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]

sudo filebeat模块启用系统


sudo filebeat模块列表




sudo filebeat setup –template -E output.logstash.enabled = false -E‘output.elasticsearch.hosts = [“ localhost:9200”]”

sudo filebeat setup -e -E output.logstash.enabled = false -E output.elasticsearch.hosts = [‘localhost:9200’] -E setup.kibana.host = localhost:5601

sudo systemctl开始文件拍
sudo systemctl启用filebeat

curl -X GET‘http:// localhost:9200 / filebeat-* / _ search?pretty’

探索Kibana仪表盘






参考文献

 

通过 约翰扬

发表评论