ELK的原理与架构

一、概述

日志分析是运维工程师解决系统故障,发现问题的主要手段。日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
而ELK是由 Elasticsearch(日志存储和搜索)、Logstash(日志收集)、Kibana(查看日志)三个开源软件的组成的一个组合体,ELK是elastic公司研发的一套完整的日志收集、分析和展示的企业级解决方案,在这三个软件当中,每个软件用于完成不同的功能,ELK又称为ELKstack。
ELK 组件在海量日志系统的运维中,可用于解决以下主要问题:- 分布式日志数据统一收集,实现集中式查询和管理

  1. 故障排查
  2. 安全信息和事件管理
  3. 报表功能

ELK工作原理展示图:
【APPServer集群】–【logstash Agent 采集器】-【ElasticSearch cluster】–.【Kibana Server】–.【Browser】
Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从Es集群中查询数据生成图表,再返回给Browser。简单来说,进行日志处理分析,一般需要经过以下几个步骤:
1.将日志进行集中化管理( beats)
2.将日志格式化( logstash)
3.对格式化后的数据进行索引和存储(elasticsearch)
4.前端数据的展示(kibana)

要收集哪些日志
1)系统日志——》为监控做准备
2)服务日志
1、数据库—》mysql—》慢查询日志、错误日志、普通日志
2、tomcat,因为log4j是java开发的
3)业务日志——》log4j
日志收集后,如何展示(可视化)

  1. kibana
  2. grafana
    日志收集展示出来后,怎么使用啊
    1)给与大数据分析,做为立体化展示的数据源
    2)给研发使用(排障、解决bug等等)
    3)统计数据流量、做为分析报告的数据源

二、优点

  1. 处理方式灵活:elasticsearch是实时全文索引,具有强大的搜索功能 (支持任意key全文搜索)
  2. 配置相对简单:elasticsearch的API全部使用JSON接口,logstash使用模块配置,kibana的配置文件部分更简单。
  3. 检索性能高效:基于优秀的设计,虽然每次查询都是实时,但是也可以达到百亿级数据的查询秒级响应。
  4. 集群线性扩展:elasticsearch和logstash都可以灵活线性扩展,节点读写出现瓶颈可以扩容(3 5 7 11个服务器)
  5. 前端操作绚丽:kibana的前端设计比较绚丽,而且操作简单(早期比较简单)

三、Elasticsearch

一个高度可扩展的开源全文搜索和分析引擎,它可实现数据的实时全文搜索、支持分布式可实现高可用、提供API接口,可以处理大规模日志数据,比如Nginx、Tomcat、系统日志等功能。
Elasticsearch使用Java语言开发,是建立在全文搜索引擎ApacheLucene基础之上的搜索引擎,
Elasticsearch的特点:

  1. 实时搜索、实时分析
  2. 分布式架构、实时文件存储
  3. 文档导向,所有对象都是文档
  4. 高可用,易扩展,支持集群,分片与复制
  5. 接口友好,支持json
    默认情况下,Elasticsearch中的每个索引被分片5个主分片和1个副本,这意味着,如果你的集群中至少有两个节点,你的索引将会有5个主分片和另外5个副本分片(1个完全拷贝),这样的话每个索引总共就有10个分片。

四、Logstash

Logstash 是一个具有实时传输能力的数据收集引擎,其可以通过插件实现日志收集和转发,支持日志过滤,支持普通 log、自定义 json 格式的日志解析,最终把经过处理的日志发送给 elasticsearch。

五、kibana

Kibana 为 elasticsearch 提供一个查看数据的 web 界面,其主要是通过elasticsearch 的 API 接口进行数据查找,并进行前端数据可视化的展现,另外还可以针对特定格式的数据生成相应的表格、柱状图、饼图等。

六、搭建

1、环境搭建

192.168.133.50 host1
192.168.133.100 host2
192.168.133.75 web

systemctl stop firewalld
setenforce 0
hostname host1                                                  host1上执行
su
hostname host2                                                  host2上执行
su
hostname web                                                    web上执行
su
echo "192.168.133.50 host1
192.168.133.100 host2
192.168.133.75 web">> /etc/hosts

在这里插入图片描述
在这里插入图片描述

2、搭建时间同步:

2.1、主服务器设置

[root@host1 ~]# yum install ntp -y
[root@host1 ~]# vim /etc/ntp.conf

在这里插入图片描述
改成
在这里插入图片描述

[root@host1 ~]# service ntpd start
Redirecting to /bin/systemctl start ntpd.service

2.2、从服务器设置

[root@host2 ~]# yum install ntpdate -y
[root@host2 ~]# service ntpd start
Redirecting to /bin/systemctl start ntpd.service
[root@host2 ~]# /usr/sbin/ntpdate 192.168.133.75
16 Dec 11:40:08 ntpdate[42044]: the NTP socket is in use, exiting
[root@localhost mysql]# crontab -e
no crontab for root - using an empty one
crontab: installing new crontab

在这里插入图片描述

[root@host2 ~]# crontab -l
*/10 * * * * /usr/sbin/ntpdata 192.168.133.75

3、安装

host1和host2上操作,只展示host1上的操作

3.1、安装包elasticsearch-5.5.0.rpm

[root@host1 ~]# cd /opt

在这里插入图片描述

rpm -ivh elasticsearch-5.5.0.rpm

在这里插入图片描述

[root@host1 opt]# cd /etc/elasticsearch/
[root@host1 elasticsearch]# cp elasticsearch.yml{,.bak}
[root@host1 elasticsearch]# vim elasticsearch.yml
 17 #cluster.name: my-application                                  开启并修改集群名字
 改
 17 cluster.name: zy-elk
23 #node.name: node-1                                         开启并改成主机名两台机器分别改
改
23 node.name:host1                                               host1上改
23 node.name:host2                                               host2上改
33 #path.data: /path/to/data                               开启设置数据目录需要新建并给权限
改
33 path.data: /data/elk_data
37 #path.logs: /path/to/logs                                  开启并修改日志文件路径
改
37 path.logs: /var/log/elasticsearch/
43 #bootstrap.memory_lock: true                               内存锁取消
改
43 bootstrap.memory_lock: false
55 #network.host: 192.168.0.1                                  开启并更改监听端口
改
55 network.host: 0.0.0.0
59 #http.port: 9200                                              开启端口
改
59 http.port: 9200
68 #discovery.zen.ping.unicast.hosts: ["host1", "host2"]           自动集群发现,加入主机名
改
68 discovery.zen.ping.unicast.hosts: ["host1", "host2"]

在这里插入图片描述
在这里插入图片描述

[root@host1 elasticsearch]# mkdir -p /data/elk_data
[root@host1 elasticsearch]# chown -R elasticsearch.elasticsearch /data/elk_data/
[root@host1 elasticsearch]# systemctl enable --now elasticsearch.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service.
[root@host1 elasticsearch]# netstat -ntap|grep 9200
tcp6       0      0 :::9200                 :::*                    LISTEN      39393/java 

这时可以在客户机上打开http://192.168.133.50:9200
在这里插入图片描述
客户机上打开http://192.168.133.100:9200
在这里插入图片描述
http://192.168.133.50:9200/_cluster/health?pretty
这里可显示状态为正常
在这里插入图片描述
http://192.168.133.50:9200/_cluster/state?pretty
在这里插入图片描述

3.2、安装Elasticsearch-head插件

Elasticsearch在5.0 版本后,Elasticsearch-head插件需要作为独立服务进行安装,需要使用npm.工具(Wodeas的包管理T具)安装。安装 Elasticsearch-head 需要提前安装好依赖软件node 和 phantomjs。
node:是一个基于 Chrome v8引擎的 JavaScript运行环境。
phantomjs:是一个基于websit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于webkit浏览器做的事情,它都可以做到。

1、安装node
[root@host1 elasticsearch]# yum install gcc gcc-c++ make -y
[root@host1 opt]# ls

在这里插入图片描述

[root@host1 opt]# tar xf node-v8.2.1.tar.gz
[root@host1 opt]# cd node-v8.2.1/
[root@host1 node-v8.2.1]# ./configure
[root@host1 node-v8.2.1]# make && make install
2、安装phantomjs

在这里插入图片描述

[root@host1 opt]# tar xf phantomjs-2.1.1-linux-x86_64.tar.bz2  -C /usr/local/src/  解压到指定目录
[root@host1 opt]# cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/           进入目录
[root@host1 phantomjs-2.1.1-linux-x86_64]# ln -s /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/* /usr/local/bin/
3、安装elasticsearch-head

在这里插入图片描述

[root@host1 opt]# tar zxvf elasticsearch-head.tar.gz  -C /usr/local/src/
[root@host1 opt]# cd /usr/local/src/elasticsearch-head/
[root@host1 ~]# vi /etc/elasticsearch/elasticsearch.yml                      末尾增加2行

在这里插入图片描述

http.cors.enabled: true
#开启跨域访问支持,默认是false
http.cors.allow-origin: "*"
#指定跨域访问允许的域名地址为所有
[root@host1 elasticsearch-head]# systemctl restart elasticsearch
[root@host1 ~]# systemctl status elasticsearch

在这里插入图片描述

4、启动服务器
[root@host1 elasticsearch-head]# cd /usr/local/src/elasticsearch-head/
[root@host1 elasticsearch-head]# npm run start &

在这里插入图片描述
在这里插入图片描述
这时可以去打开192.168.133.50:9100
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在host1上创建一个索引索引为index-demo,类型为test,可以看到成功创建

[root@host1 elasticsearch-head]#  curl -X PUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"ceshi","mesg":"hello elk"}'

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点开后可看到详细信息
在这里插入图片描述

4、ELK Logstash 部署(在web节点上操作)

[root@web ~]# yum install httpd -y
[root@web ~]# systemctl start httpd
[root@web ~]# cd /opt

在这里插入图片描述

[root@web opt]# rpm -ivh logstash-5.5.1.rpm
[root@web opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

在这里插入图片描述

4.1、logstash(Apache)与elasticsearch(node)功能是否正常,做对接测试

Logstash这个命令测试
字段描述解释:
● -f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
● -e 后面跟着字符串 该字符串可以被当做logstash的配置(如果是“空”则默认使用stdin做为输入、stdout作为输出)
● -t 测试配置文件是否正确,然后退出

[root@web opt]# logstash -e 'input { stdin{} } output { stdout{} }'

在这里插入图片描述

4.2、使用rubydebug显示详细输出,codec为一种编解码器

[root@web opt]# logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'

在这里插入图片描述

4.3、使用logstash将信息写入elasticsearch中 输入 输出 对接

[root@web opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.133.50:9200"] } }'

在这里插入图片描述

4.4、logstash配置文件

[root@web opt]# ll /var/log/messages 

在这里插入图片描述

[root@web opt]# chmod o+r /var/log/messages              给其它用户(Other Users)增加可读

在这里插入图片描述

[root@web opt]# vi /etc/logstash/conf.d/system.conf
input {
       file{
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
        }
      }
output {
        elasticsearch {
          hosts => ["192.168.133.50:9200"]
          index => "system-%{+YYYY.MM.dd}"
          }
        }

在这里插入图片描述
位置确定

[root@web opt]# vi /etc/logstash/logstash.yml 

在这里插入图片描述

[root@web opt]# systemctl restart logstash.service

到192.168.133.50:9100查看就可以看到我们刚刚查到的日志了
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
登录192.168.133.50 host1主机
在host1主机安装kibana

[root@host1 ~]# cd /usr/local/src

在这里插入图片描述

[root@host1 src]#  rpm -ivh kibana-5.5.1-x86_64.rpm
[root@host1 kibana]# cp kibana.yml kibana.yml.bak
[root@host1 kibana]#  vi /etc/kibana/kibana.yml
 2 #server.port: 5601                                                                                             kibana打开的端口开启
改
2 server.port: 5601
7 #server.host: "localhost"                                                                                   监听端口开启并修改
改
7 server.host: "0.0.0.0"
21 #elasticsearch.url: "http://localhost:9200"                                                      开启并修改和elasticsearch建立联系
改
21 elasticsearch.url: "http://192.168.133.50:9200"
30 #kibana.index: ".kibana"                                                                      在elasticsearch中添加.kibana索引
开启
30 kibana.index: ".kibana"
[root@host1 kibana]# systemctl start kibana.service
[root@host1 kibana]# systemctl status kibana.service

在这里插入图片描述

然后在客户机上打开http://192.168.133.50:5601

在这里插入图片描述
可以根据之前的索引键进行创建
在这里插入图片描述
创建完毕后就可以查看了
在这里插入图片描述
在这里插入图片描述

4.5、对接Apache主机的Apache 日志文件(访问的、错误的)

[root@web ~]# cd /etc/logstash/conf.d/
[root@web conf.d]# touch apache_log.conf
[root@web conf.d]# vi apache_log.conf
input {
       file{
        path => "/etc/httpd/logs/access_log"
        type => "access"
        start_position => "beginning"
        }
       file{
        path => "/etc/httpd/logs/error_log"
        type => "error"
        start_position => "beginning"
        }
        
      }
output {
        if [type] == "access" {
        elasticsearch {
          hosts => ["192.168.133.50:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
        elasticsearch {
          hosts => ["192.168.133.50:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
        }

在这里插入图片描述

[root@web conf.d]# pwd
/etc/logstash/conf.d
[root@web conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf                       在此文件夹下运行

在这里插入图片描述
登录192.168.133.75 web主机 不然无法显示access日志
在这里插入图片描述
这样在192.168.133.50:9200上既可以看到这两个索引了
在这里插入图片描述
也可以创建索引进行查看
在这里插入图片描述

七、elk架构选择

1、普通版

鉴于正常logstash放在服务器上,有可能线程过多,占用资源
我们可以把logstash单独放一个服务器作为日志服务器
日志分割周期性进行传递
NFS挂载
rsync(数据量小的时候用,或者和NFS搭配)

2、升级版

logstash只做格式化过滤和输出
加入filebeat收集放在服务器上
logstash做集群化,多个logstash
或者在
filebeat和logstash中加入一些中间件
比如redis作用汇聚
MQ消息代理kafka

数据流向
logstash通过文件收集进行传输
接口调用ES9200端口接收数据
9200启动端口,监听端口,通过此端口把服务暴露出去
9100到ES数据库里调用数据 不能登录 ,链接的是logstash——head
kibana、kafka从9200端口拿取数据
ES9300监听的是集群内部
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值