共计 6277 个字符,预计需要花费 16 分钟才能阅读完成。
本文介绍关于关于搭建 elasticsearch+logstash(beats)+kibana 实现搭建可视化的日志分析系统。
这几款软件也都是免费开源的,其官方站点为:https://www.elastic.co/cn/products
一、关于这几款软件的介绍
Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负载等。
Logstash 是一个开源的用于收集, 分析和存储日志的工具。
Kibana 也是一个开源和免费的工具,Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以汇总、分析和搜索重要数据日志。
Beats 是 elasticsearch 公司开源的一款采集系统监控数据的代理 agent,是在被监控服务器上以客户端形式运行的数据收集器的统称,可以直接把数据发送给 Elasticsearch 或者通过 Logstash 发送给 Elasticsearch,然后进行后续的数据分析活动。Beats 由如下组成:
①Packetbeat:是一个网络数据包分析器,用于监控、收集网络流量信息,Packetbeat 嗅探服务器之间的流量,解析应用层协议,并关联到消息的处理,其支 持 ICMP (v4 and v6)、DNS、HTTP、Mysql、PostgreSQL、Redis、MongoDB、Memcache 等协议;
②Filebeat:用于监控、收集服务器日志文件,其已取代 logstash forwarder;
③Metricbeat:可定期获取外部系统的监控指标信息,其可以监控、收集 Apache、HAProxy、MongoDB、MySQL、Nginx、PostgreSQL、Redis、System、Zookeeper 等服务;
④Winlogbeat:用于监控、收集 Windows 系统的日志信息;
⑤Create your own Beat:自定义 beat,如果上面的指标不能满足需求,elasticsarch 鼓励开发者 使用 go 语言,扩展实现自定义的 beats,只需要按照模板,实现监控的输入,日志,输出等即可。
Beats 将搜集到的数据发送到 Logstash,经 Logstash 解析、过滤后,将其发送到 Elasticsearch 存储,并由 Kibana 呈现给用户。
Beats 作为日志搜集器没有 Logstash 作为日志搜集器消耗资源,解决了 Logstash 在各服务器节点上占用系统资源高的问题。
二、实现 elasticsearch+logstash+kibana 的部署
(1)大概网络拓扑图
说明:
蓝线的线路图:文件 —->logstash server——>elasticsearch
Logstash 自己做过滤(input plugin)、转换(filter plugin)、输出(output plugin)机制然后直接传送到 elasticsearch 集群
红线的路线图说明:logstash agent 将数据传输到 logstash server 端,在 servlet 端进行统一的输出格式。此刻 agent 端输入是文件,输出到 server;在 logstash server 端,输入端是 logstash agent,输出端是 elasticsearch 集群。
墨色的线路图:加个 redis 做队列缓冲,为了减轻 logstash server 的压力,这也是主流的配置。
以上三种情况,就模拟第三种主流的配置,第一、二有兴趣的可以自己做一下。
(2)主机配置说明
主机名 | ip | 运行的服务 |
---|---|---|
master | 172.16.5.4 | elasticsearch、filebeat |
server1 | 172.16.5.3 | logstash agent、redis |
server2 | 172.17.5.2 | logstash server、kibana |
由于本实验测试吃很大内存,就不搭建集群了,都是用一台服务器测试。
(3)部署 elastic stach
①环境部署。
关闭 iptables、selinux,同时时间同步、hosts 文件进行解析。
命令:iptables -F 情况防火墙策略
setenforce 0 临时关闭 selinux,如果想要永久关闭,修改配置文件,不多说。
②安装 java 环境,解决依赖关系,所有服务器上都安装。
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel -y
③安装 elasticsearch 安装包。
可以官网下载:https://www.elastic.co/cn/products/elasticsearch
我使用已经下载好的安装包
rpm -ivh elasticsearch-5.4.2.rpm
④修改配置文件
vim /etc/elasticsearch/jvm.options
修改内存:
-Xms1g
-Xmx1g【建议生产环境 32g,发挥最好的性能】
vim /etc/elasticsearch.yml
cluster.name: myels【集群名字】
node.name: node1【节点名字,主机名】
path.data: /data/els/data【索引存放路径】
path.logs: /data/els/logs【日志路径】
network.host: 0.0.0.0【加入集群时使用的地址,本机地址】
http.port: 9200【监听端口】
discovery.zen.ping.unicast.hosts: [“node1”, “node2”, “node3”]【判断是否在同一个集群里,也就是是否都是监听同一端口】
discovery.zen.minimum_master_nodes: 2【有几个节点,大于半数的最小值】
⑤创建 elasticsearch 使用的 index 和 logs 目录
mkdir -pv /els/{date,logs} && chown -R elasticsearch:elasticsearch /els/*【创建索引和日志目录】
⑥启动服务
systemctl start elasticsearch.service
测试。
出现以上就是成功了
(4)在 server1 上部署 logstash agent 和 redis
①安装 logstash 和 redis 包。
②查看 logstash 的配置文件
/etc/logstash/jvm.options【运行环境,即配置内存等信息;server 端建议大,agent 默认就行】
/etc/logstash/conf.d【配置插件使用的文件】
/etc/logstash/logstash.yml【主配置文件,配置怎么运行】
config.reload.automatic: ture【文件是否立即生效,默认 false 需要手动重启】
config.reload.devel:3【配置文件多久重新加载一次】
配置文件不用修改。
③添加到 path 路径
vim /etc/profied.d/logstash.sh
export PATH=$PATH:/usr/share/logstash/bin
④启动服务
systemctl start logstash
⑤修改 redis 配置文件
建议修改该行,提高安全性,本实验就不修改了
requirepass ilinux.io
⑥启动 redis 服务
systemctl start redis
(5)实现 server2 服务器的 logstash server 和 kibana 的部署
①安装 logstash、kibana 安装包
②修改 kibana 配置文件
vim /etc/kibana/kibana.yml
server.host: “0.0.0.0”
server.name: “ 主机名“
elasticsearch.uri: “http://server:9200”
③启动 logstash 和 kibana 服务
systemctl start logstash.service
systemctl start redis.service
④浏览器输入 http://localhost:5601,配置 filebeat 的索引(只需输入 filebeat- 即可)。
(6)模拟各服务的输入和输出指向的服务。
①模拟 logstash agent 端把日志文件输入给 redis。
设置 logstash 的转换机制。
规则转换机制都放在 /etc/logstash/conf.d/ 下面。
vim /etc/logstash/conf.d/redis.conf
补充:logstash 内带自变量函数
rpm -ql logstash | grep patternt
为了更好的模拟生产环境,我们在此安装 httpd 服务。
yum install httpd
启动 httpd 服务
systemctl start httpd.service
建立 20 个页面
for i in {1..20};do echo “test${i}” > /var/www/html/test${i};done
访问 20 次生产日志
for i in {1..20};do j=$[$RANDOM%20+1];curl http://172.16.5.3/test${j}.html;done
②模拟 logstash server 端的输入端是 redis,输出端是 elasticsearch 集群。
vim /etc/logstash/conf.d/redis.conf
③把 els 集群里面的内容发送给 kibana
在第一个框里输入 filebeat-* 后稍等片刻,kibana 会自动识别,OK 后下面的按钮会由灰色变为可操控的按钮 ”Create”, 如上图所示。点击该按钮后,最后就会呈现如下图所示:
再回过头新建 logstash 的索引,浏览器输入 http://server2:5601,点击左边栏的”Management”===> 然后点击“index Patterns”===>
然后点击“Add New”
点击“Crete”按钮创建 logstash 索引,创建完成后即会展现如下图所示:
三、实现 beats 的轻量级数据采集器
官方站点:https://www.elastic.co/cn/products/beats
工作模式:
beats——>redis——>logstash server——>els 集群
说明:
此时使用 beats 代替了 logstash agent,logstash 和 filebeat 都具有日志收集功能,filebeat 更轻量,占用资源更少,但 logstash 具有 filter 功能,能过滤分析日志。一般结构都是 filebeat 采集日志,然后发送到消息队列,redis,kafaka。然后 logstash 去获取,利用 filter 功能过滤分析,然后存储到 elasticsearch 中。
本实验在上个实验中基本都做完了,这个实验只做 filebeat 部分。
①安装包
yum install httpd filebeat -y
②修改配置文件
cd /etc/filebeat
vim filebeat.yml
filebeat.prospectors:【从哪加载文件,默认即可】
input_type: log【文件类型,日志,默认即可】
paths:
- /var/log/httpd/access_log
/var/log/httpd/error_log
hosts:【存放路径】
③添加数据
for i in {1..20};do echo “test $i” > /var/www/html/test${i}.html;done
启动 httpd 服务和 filebeat 服务
systemctl start httpd
随意找个主机进行访问,为了得到日志
for i in {1..20};do j=$[$RANDOM%20+1];curl http://172.16.0.4/test${j}.html
④输出给 elasticsearch
vim /etc/filebeat.yml
output.elasticsearch :
hosts: [“server1:9200“,“server2:9200”,“server3:9200”]
直接输出给 els 不用输出插件了⑤输出给 logstash
vim /etc/filebeat.yml
output.logstash :
hosts: [“172.16.0.4:5044]
vim /etc/logstash/conf.d/Apachelog.conf
input {
beats {
port => 5044
}
filter {
grok {
match => {
“message” => “%{HTTPD_COMBINEDLOG}”
}
}
date {
match => [“timestamp”,”dd/MMM/YYYY:H:m:s Z”]
}
mutate {
rename => {
“agent” => “user_agent”
}
}
geoip {
source => “clientip”
target => “geoip”
database => “/etc/logstash/maxmind/GeoLite2-City.mmdb”
}
output {
elasticsearsh {
hosts => [“http://server1:9200″,”http://server2:9200″,”http://master:9200”]
index => “logstash-%{+YYYY.MM.DD}
document_type => “http_access_logs”
}
}
启动:logstash -f apachelog.conf
⑥输出给 redis
编辑 filebeat 配置文件
vim /etc/filebeat.yml
添加:
output.redis:
hosts: [“redis 服务器 ”]
password: “iliunx.io”
key: “httplog”
db: 0
timeout: 5
重启 filebeat
systemctl restart filebeat
进入 redis 查看数据
redis-cli -a ilinux.io
查看有多少数据
LLEN httplogs
在 els server 端配置输入机制
vim /etc/elasticsearch/conf.d/redis2.conf
input {
redis {
batch_count => 1
data_type => “list”
key => “httpdlogs”
host => “192.168.0.2”
port => 6379
threads => 5
password => “ilinux.io”
}
}
filter {
grok {
match => {
“message” => “%{HTTPD_COMBINEDLOG}”
}
}
date {
match => [“timestamp”,”dd/MMM/YYYY:H:m:s Z”]
}
mutate {
rename => {
“agent” => “user_agent”
}
}
geoip {
source => “clientip”
target => “geoip”
database => “/etc/logstash/maxmind/GeoLite2-City.mmdb”
}
output {
elasticsearsh {
hosts => [“http://server1:9200″,”http://server2:9200″,”http://server3:9200”]
index => “logstash-%{+YYYY.MM.DD}
document_type => “http_access_logs”
}
}
本文永久更新链接地址:http://www.linuxidc.com/Linux/2018-01/150451.htm