ELK Stack即以前的Elastic Stack,Elk Stack是Elastic公司专门为集中化日志管理设计的免费开源软件组合。它允许搜索、分析和可视化来自不同来源的日志。
如在ubuntu上安装配置ELK Stack,需要如下先决条件:
Ubuntu 20.04最好使用Root 权限进行配置#二、 内容目录ELK Stack 组成部分安装 Java 和所有依赖项安装和配置 Elasticsearch安装和配置 Logstash安装和配置 Kibana安装和配置 Nginx安装和配置 Filebeat配置 Linux 日志到 Elasticsearch在Kibana中创建日志仪表板监控 SSH 事件#三、 ELK Stack 组成1、Elasticsearch:Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎,使用RESTful API,可以存储、检索数据。
2、Logstash:Logstash是一个开源的数据收集引擎,可以采集不同数据源的数据发送给Elasticsearch
3、Kibana:用于分析和可视化日志的 Web可视化平台
4、Filebeat:轻量级的日志收集和转发器,可以把数据收集后转发到Logstash或Elasticsearch
#四、 安装 Java 和所有依赖项Elasticsearch是Java编写的程序,所以需要安装JDK,可以使用如下命令安装OpenJDK和其他一些所需的软件包。
sudo apt install -y openjdk-14-jdk wget apt-transport-https curl然后导入Elasticsearch的公钥,添加apt软件源
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -添加软件源
#五、 安装和配置Elasticsearch更新软件源
sudo apt update然后安装(国内安装比较慢,请耐心等待)
sudo apt-get install elasticsearch安装完后,开始配置Elasticsearch
Elasticsearh默认监听9200端口。为了安全,需要设置一下限制外网访问。使外部网络无法通过REST API访问数据和elastic集群。Elasticsearch的配置文件是elasticsearch.yml。修改它就行。
打开配置文件
sudo gedit /etc/elasticsearch/elasticsearch.yml找到监听接口和端口进行修改
删掉前面的注释符号#改成如下的样子:
保存,然后启动Elasticsearch服务
sudo systemctl start elasticsearch查看服务状态和验证是否已经启动
sudo systemctl status elasticsearchcurl -X GET localhost:9200看到这个,就说明Elasticsearch启动成功了。
你也可以在浏览器里面访问https://localhost:9200查看
#六、 安装和配置Logstash首先确保系统里面有openssl,然后安装Logstash
openssl version -asudo apt install logstash -y创建一个SSL证书用于保证Rsyslog 和Filebeat传输数据给Logstash时的安全性。
在Logstash的配置文件目录下创建一个ssl的目录,然后生成证书
sudo mkdir -p /etc/logstash/sslcd /etc/logstashsudo openssl req -subj '/CN=elkmaster/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout ssl/logstash-forwarder.key -out ssl/logstash-forwarder.crt为了方便后续配置,我们可以修改一下/etc/hosts文件。把主机的ip配置一个主机名
然后我们需要配置三个文件,分别是用于从filebeat接收数据的filebeat-input.conf,用于过滤系统日志的过滤器配置文件syslog-filter.conf,以及用于输出数据到elasticsearch的output-elasticsearch.conf。
在logstash配置目录创建filebeat-input.conf文件
cd /etc/logstash/sudo gedit conf.d/filebeat-input.conf添加如下内容:
input { beats { port => 5443 type => syslog ssl => true ssl_certificate => "/etc/logstash/ssl/logstash-forwarder.crt" ssl_key => "/etc/logstash/ssl/logstash-forwarder.key" }}然后创建过滤器配置文件syslog-filter.conf并采用grok过滤器,这个的作用就是让Logstash根据给出的规则提取数据。
sudo gedit conf.d/syslog-filter.conf输入如下内容:
filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } add_field => [ "received_at", "%{@timestamp}" ] add_field => [ "received_from", "%{host}" ] } date { match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } }}然后创建一个output-elasticsearch.conf配置文件用于将数据传输给 elasticsearch。
sudo gedit conf.d/output-elasticsearch.conf内容如下:
output { elasticsearch { hosts => ["localhost:9200"] hosts => "localhost:9200" manage_template => false index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" }}配置文件弄好之后,启动logstash服务看是否正常。
sudo systemctl start logstashsudo systemctl status logstash没有报错,说明服务正常启动了。
#七、 安装和配置Kibana安装Kibana也是通过apt即可完成
sudo apt install kibana安装完成之后,我们设置一下kibana的配置文件
sudo gedit /etc/kibana/kibana.yml主要是修改监听端口和地址,以及elasticsearch的地址
保存,然后启动kibana服务
然后你可以直接在浏览器中访问它
#八、 安装和配置Nginx安装这个主要是给Kibana做反向代理的。
首先安装Nginx和Apache2-utlis
sudo apt install nginx apache2-utils -y安装完成之后,创建kibana虚拟主机配置文件
sudo gedit /etc/nginx/sites-available/kibana内容如下:
server { listen 80; server_name localhost; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.kibana-user; location / { proxy_pass https://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; }}给配置文件创建一个连接
sudo ln -s /etc/nginx/sites-available/kibana /etc/nginx/sites-enabled/然后给访问Kibana Dashboard配置一个基础身份认证
sudo htpasswd -c /etc/nginx/.kibana-user elastic然后测试Nginx配置文件并启动服务
sudo nginx -tsudo systemctl restart nginx#九、 安装和配置Filebeat下载filebeat然后安装
下载地址:https://www.elastic.co/cn/downloads/beats/filebeat
可以按照自己的需求进行下载
我们这里是安装在Ubuntu上,所以选择DEB版本下载。当然也可以直接用apt安装,前提是你在之前添加了Elastic的软件源。可以看官方指南进行添加软件源:https://www.elastic.co/guide/en/beats/filebeat/7.10/setup-repositories.html#_apt
sudo apt install filebeat -y然后编辑filebeat的配置,配置文件的路径:
/etc/filebeat/filebeat.yml首先把input部分改为true
然后修改Elasticsearch output部分
修改成如下配置:(根据你的实际情况进行设置)
修改Kibana配置部分:
修改完后保存。
然后初始化filebeat
sudo filebeat setup复制之前生成的logstash-forwarder.crt证书到/etc/filebeat目录中
sudo cp /etc/logstash/ssl/logstash-forwarder.crt /etc/filebeat/然后启动filebeat服务
sudo systemctl start filebeat#十、 配置 Linux 日志到 Elasticsearch配置rsyslog到Logstash,然后这些日志会自动传输到Elasticsearch
在配置日志到Logstash之前,我们首先需要配置Logstash到Elasticsearch之间的日志转发。
在/etc/logstash/conf.d目录下创建一个配置文件来设置到Elasticsearch之间的日志转发。
cd /etc/logstash/conf.d/sudo gedit logstash.conf配置文件的内容如下:
input { udp { host => "127.0.0.1" port => 10514 codec => "json" type => "rsyslog" }} # The Filter pipeline stays empty here, no formatting is done.filter { } # Every single log will be forwarded to ElasticSearch. If you are using another port, you should specify it here. output { if [type] == "rsyslog" { elasticsearch { hosts => [ "localhost:9200" ] } } }配置文件主要由三部分组成,input部分:定义日志从哪儿来,filter部分:日志过滤器,output部分:日志传输到什么地址。
然后我们重启一下logstash服务
sudo systemctl restart logstash然后配置从rsyslog到Logstash日志转发,rsyslog可以使用模板转换日志然后进行转发。
为了让 rsyslog 转发日志,需要在 /etc/rsylog.d目录中创建一个70-output.conf的配置文件。
cd /etc/rsyslog.d/sudo gedit 70-output.conf添加如下内容:
*.* @127.0.0.1:10514;json-template意思是所有日志发送到127.0.0.1:10514并使用json格式的模板进行转换
我们需要创建一个json格式的模板文件
sudo gedit 01-json-template.conf内容如下:
template(name="json-template" type="list") { constant(value="{") constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339") constant(value="\",\"@version\":\"1") constant(value="\",\"message\":\"") property(name="msg" format="json") constant(value="\",\"sysloghost\":\"") property(name="hostname") constant(value="\",\"severity\":\"") property(name="syslogseverity-text") constant(value="\",\"facility\":\"") property(name="syslogfacility-text") constant(value="\",\"programname\":\"") property(name="programname") constant(value="\",\"procid\":\"") property(name="procid") constant(value="\"}\n")}然后启动rsyslog服务
sudo systemctl start rsyslog检查logstash监听端口是否正常:
ss -na | grep 10514如果监听没成功,并且在日志中看到以下报错信息:
是因为配置文件里面存在语法错误,ELK软件对配置文件的语法要求比较严格,请仔细检查。
#十一、 在Kibana中创建日志仪表板在浏览器中打开Kibana界面
首先需要创建一个索引模式
然后找到Stack Management---Kibana中的Index Patterns
然后点击Create index pattern
输入logstash-*,然后点击Next step
然后时间过滤器我们选择@timestamp
然后点击Create index pattern
添加成功后是这样的:
点击回到Kibana的Discover中,在这里可以查询搜索你的数据
#十二、 监控 SSH 事件在过滤条件中,我们设置过滤条件为programename:sshd*
这样就可以看到sshd程序相关事件了。
#十三 参考资料配置 SSL、TLS 以及 HTTPS 来确保 Elasticsearch、Kibana、Beats 和 Logstash 的安全 | Elastic Blog https://www.elastic.co/cn/blog/configuring-ssl-tls-and-https-to-secure-elasticsearch-kibana-beats-and-logstash
如何使用 Elastic Stack 监测 Nginx Web 服务器 | Elastic Blog https://www.elastic.co/cn/blog/how-to-monitor-nginx-web-servers-with-the-elastic-stack