
弹性堆栈具有四个主要组件:
- 弹性搜索:分布式 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 root root 79779303 5月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
安装Nginx
sudo yum安装epel-release
须藤yum安装nginx
sudo systemctl启动nginx
sudo systemctl启用nginx
禁用防火墙
安装ElasticSearch
[[电子邮件 protected] 〜]# sudo rpm –import //artifacts.elastic.co/GPG-KEY-elasticsearch
[[电子邮件 protected] 〜]#sudo vi /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
. . .
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] 〜]#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
须藤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 上
150.136.225.194是您的ELK VM的公共IP。如果您没有FQDN,则可以使用Ngnix的public ip来收听您的ELK网站。localhost:5601
。此外,它将Nginx配置为读取 htpasswd.users
文件并需要基本身份验证。
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] 〜]#须藤vi /etc/logstash/conf.d/10-syslog-filter.conf
[[电子邮件 protected] 〜]#须藤vi /etc/logstash/conf.d/10-syslog-filter.conf
[[电子邮件 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”}
配置确定
[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上侦听。
input {
beats {
port => 5044
}
}
接下来,创建一个名为10-syslog-filter.conf的配置文件,它将为系统日志(也称为syslogs)添加一个过滤器:
须藤vi /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数据存储在运行在localhost:9200的Elasticsearch中,并以使用Beat命名的索引存储。本教程中使用的Beat是Filebeat:
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
- 文件拍 :收集并发送日志文件。
- 公制节拍 :从您的系统和服务中收集指标。
- 包拍 :收集和分析网络数据。
- Winlogbeat:收集Windows事件日志。
- 审核信号 :收集Linux审核框架数据并监视文件完整性。
- 心跳 :通过主动探测来监视服务的可用性。
sudo yum安装filebeat
须藤vi /etc/filebeat/filebeat.yml
...
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
...
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仪表盘
参考文献