ELK 开源日志分析平台

日志分析系统
Splunk
ELK

Splunk

是一个分析计算机系统产生的数据,并在广泛的场景中提供数据手机,分析可视化分布式的数据计算平台
是一个商业化产品

优势
Splunk 是一个数据引擎
针对所有IT系统和基础设施数据,提供数据搜索,报表和可视化展现
Splunk 是软件 -几分钟就可以下载和安装
可以运行在各种主流操作系统平台

国内站点
https://www.splunk.com/zh-hans_cn

ELK

日志分析前言:
在日常运维中,对于系统和业务日志的处理尤为重要,日志主要包括系统日志,应用程序日志和安全日志。系统运维人员和开发人员可以通过日志了解服务器软硬件信息,检查配置过程中的错误及错误发生的原因,经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。

日志分析传统方案
通常,日志被分散的存储在不同的设备上,如果管理数十上百台服务器,如果还使用依次登录每台机器的传统方法查阅日志,这样方所且效率低下,所以需要我们对日志实行集中化管理,例如,开源的syslog,将所有服务器上的日志收集汇总。
集中化管理日志之后,日志的统计和检索又称为一件比较麻烦的事情,一般使用grep,awk 和wc等Linux命令能实现检索和统计,但是对于要求更高的查询,排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心

日志分析系统ELK 简介
ELK 是一个基于浏览器界面的Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibanan 可以为Logstash 和ELasticSearch 提供的日志分析 提供一个友好的web界面,可以帮忙汇总分析和搜索重要的数据日志。

E:Elasticsearch 弹性搜索,日志存储
接收Logstash 提交的日志,存储日志
是一个基于Lucene的开源分布式搜索服务器
特点: 分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等
它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web 接口,
Elasticsearch是用java开发的,并作为Apache许可条款下的开放源代码发布,是第二流行的企业搜索引擎,设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便
在Elasticsearch 中,所有节点的数据是均等的

L:Logstash 收集日志
部署在产生日志的应用服务器上,应用于收集日志
是一个完全开源工具,可以对自己的日志进行收集,过滤分析,并将其存储供以后使用(比如搜索),logstash带有一个web界面,用于搜索和展示所有日志

K:Kibana 日志展示
是一个基于浏览器页面的 Elasticsearch前端展示工具,也是一个开源和免费的工具,Kibana 可以为Logstash 和ElasticSearch 提供友好的日志分析web界面,可以汇总,分析和搜索中重要数据日志

工作原理
Logstash 收集AppServer产生的Log,并存放到ElasticSearch 集群中,而Kibana则从ES集群中查询数据生成图表

产生日志–>收集日志–>存储日志–>展示日志–> 查看日志

ELK部署

环境
操作系统
CentOS7.3
防火墙
firewalld 关闭,SELINUX关闭
时间一致
ntpserver 时间服务器
域名解析
elk-node1 ,elk-node2
服务器
elk-node1 192.168.1.169 #master机器
elk-node2 192.168.1.161 #slave机器
关于master-slave 模式
master收集到日志后,会把一部分数据碎片到slave上(随机的一部分数据);同时,master和slave又都会各自做副本,并把副本放到对方机器上,这样就保证了数据不会丢失, 如果master宕机了,那么客户端在日志采集配置中将Elasticsearch主机指向改为slave,就可以保证ELK日志的正常采集和web展示

Elasticsearch

基础环境安装 elk-node1 和elk-node2 同时操作
下载安装GPG Key
rpm –import https://packages.elastic.co/GPG-KEY-elasticsearch
添加yum仓库
vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch for 2.x packages
baseurl= http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey= http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1

安装elasticsearch
yum install -y ealsticsearch redis nginx java
安装相关测试文件
下载安装elel源 epel-relese-latest-7.noarch.rpm
wget http://dl.fedoraproject.org/pub/epel/epel-release-7.noarch.rpm
rpm -ivh epel-release-latest-7.noarch.rpm
测试java环境
java -version

配置部署
elk-node1 的配置
修改配置文件
mkdir -p /data/es-data 自定义日志存储目录
vim /etc/elasticsearch/elasticsearch.yml
cluster.name:breeze #组名(同一个组,组名必须一致)
node.name:elk-node1 #节点名称,建议和主机名一致
path.data:/data/es-data #数据存放的路径
bootstrap.mlockall:true #锁住内存,不被使用到交换分区去(通常在内存不足时,休眠的程序内存信息会被交换到swap 交换分区)
network.host:0.0.0.0 #网络设置
http.port:9200 #端口
启动并查看
chown -R elasticsearch.elasticsearch /data/ 授权
systemctl start elasticsearch 启动elasticsearch
systemctl enable elasticsearch
systemctl status elasticsearch
netstat -antlp |grep “9200|9300”

elk-node2 的配置
mkdir -p /data/es-data 自定义日志存储目录
vim /etc/elasticsearch/elasticsearch.yml
cluster.name:breeze #组名(同一个组,组名必须一致)
node.name:elk-node1 #节点名称,建议和主机名一致
path.data:/data/es-data #数据存放的路径
bootstrap.mlockall:true #锁住内存,不被使用到交换分区去(通常在内存不足时,休眠的程序内存信息会被交换到swap 交换分区)
network.host:0.0.0.0 #网络设置
http.port:9200 #端口
discovery.zen.ping.multicast.enabled:false #关闭多播
discovery.zen.ping.unicast.hosts:[” 192.168.1.169″,” 192.168.1.161″] #主服务器地址和自己的地址
启动并查看
chown -R elasticsearch.elasticsearch /data/ 授权
systemctl start elasticsearch 启动elasticsearch
systemctl enable elasticsearch
systemctl status elasticsearch
netstat -antlp |grep “9200|9300”

测试
通过web测试
http:// 192.168.1.169:9200
通过命令行测试
curl -i -XGET ‘http:// 192.168.1.169:9200/_count?prett’ -d ‘{“query”:{“match_all”:{}}}’ 反回200 则说明测试成功

安装插件1
elk-node1 和elk-node2上都要安装
两台安装完毕并重启,再来进行访问和数据插入测试
/user/share/elasticsearch/bin/plugin install mobz/elasticsearch-head #最实用的通过web界面来查看elasticsearch 集群状态信息
chown -R elasticsearch.elasticsearch /usr/share/elasitcsearch/plugins
systemctl restart elasticsearch
两台服务器均安装插件完毕,再进行测试

安装插件2
elk-node1 和 elk-node2 都要安装
/usr/share/elasticsearch/bin/plugin install Imenezes/elasticsearch/plugins #通过web界面来管理和监控elasticsearch 集群状态信息
chown -R elasticsearch.elasticsearch /usr/share/elasticsearch/plugins #授权
systemctl restart elasticsearch
两台服务器插件均安装完毕再进行测试

两台服务器均可插件测试
测试插件1
http://192.168.1.169:9200/_plugin/head/
看见两个节点即可,右侧提示green即可,否则也可以

测试插件2
http://192.168.1.169:9200/_plugin/kopf/#!/cluster

Logstash

部署在应用服务器上

elk-node1 和elk-node2 来模拟应用服务器,与分离部署本质的区别只是上报地址的不同

下载并安装GPG-KEY
rpm –import https://packages.elastic.CO/GPG-KEY-elasticsearch

添加yum 仓库
vim /etc/yum.repo.d/logstash.repo
[logstash-2.1]
name=Logstash repository for 2.1.x packages
baseurl=http://packages.elastic.co/logstash/2.1/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enable=1

安装logstash
yum install -y logstash

logstash 启动

数据收集测试1 : 命令行单行操作
基本的输入输出
/opt/logstash/bin/logstash -e ‘input {stdin{} } output {stdout{} }’ # -e 执行,后面用 -f 带脚本的形式执行 。input/output{} 输入输出函数 stdin/stout{}标准输入/输出
使用rubydebug详细输出
/opt/logstash/bin/logstash -e ‘input { stdin{} } output { stdout{ codec => rubydebug} }’
把内容写到elasticsearch中
/opt/logstash/bin/logstash -e ‘input { stdin{} } output { elasticsearch {hosts >= [“192.168.1.160:9200”]} }’
写到elasticsearch中又在文件中写一份
/opt/logstash/bin/logstash -e ‘input { stdin{} } output { elasticsearch {hosts >= [“192.168.1.160:9200”]} stdout {codec => rubydebug }}’

数据收集测试2: logstash 的配置和文件的编写

简单的配置方式
   vim /etc/logstash/conf.d/01-logstash.conf 
     input { stdin{} }
     output{ 
        elasticsearch { host =>["192.168.1.160:9200"]}     
        stdout { codec=>rubydebug }
     }

  执行信息 :
  Setting: Default filter workers:1 
  Logstash startup completed 
  beijing  #输出内容
  {
       "message"=>"beijing",
       "@version"=>"1",
       "@timestamp"=>"2020-05-20T09:41:48:48 401Z",
        "host"=>"elk-node1"
  }

参考官方配置文档

收集系统系统日志
  编写logstash的配置文件
   vim  file.conf
     input {
     file{
      path => "/var/log/messages"
      tpye => "system"
      start_position => "beiginning"
    }  
 }
      output {
       elasticsearch{ 
        host => ["192.168.1.160:9200"]
        index => "system-%{+YYYY.MM.dd}"  
   } 
 }
   执行
    如果中断,就表示日志不在收集,所以需要放在后台执行~
    /opt/logstash/bin/logstash -f file.conf &
 
   收集JAVA日志
   编写logstash 的配置文件
     vim file.conf
       #多个输入源,就多些几个input
       #替换掉host地址
       #注意日志文件是否存在
       #type 名称需要小写
       input{
         file{
           path => "/var/log/messages"
           type => "system"
           start_position => "beginning"
   }
 }
      input {
        file {
          path => "/var/log/elasticsearch/breeze.log"
          type => "es-error"
          start_position => "beiginning"
  }
}
      output {
       if[type]=="system"{
          elasticsearch{ 
        host => ["192.168.1.160:9200"]
        index => "system-%{+YYYY.MM.dd}"  
   }  
      if[type]== "es-error"{
           elasticsearch{ 
        host => ["192.168.1.160:9200"]
        index => "system-%{+YYYY.MM.dd}"  
     } 
   }
}

执行
 /opt/logstash/bin/logstash -f file.conf&
登录elasticsearch界面,查看数据

多行模式
  vim multiline.conf 
     input {
      stdin{
       codec =>multiline{
      //多行模式,碰到执行日志之前,日志为无效,遇到模式时,才将模式之前的信息,收集成日志。
        pattern => "^\["  #模式,结束符号
        nagate => true    #无效
        what => "previous" #之前
      } 
   }
      putput {
       stdio{
        codec => "rubydebug"
       }
   }
 }

执行命令
  /opt/logstash/bin/logstash -f multiline.conf 
在没有遇到 [ 的时候,系统不会收集,只有遇见 [ 的时候,才算是一个时间,才会收集
  参考内容: 官方文档 
 https://www.elastic.co/guide/index.html

模块总结
file logstash从日志文件中收集日志
stdin logstash 从标准输入中收集日志
stdout logstash 输出日志
syslog logstash 从系统日志程序中收集日志
tcp logstash 从tpc程序端口中收集日志
udp logstash从udp程序断后中收集日志
rubydebug 通过rubuy库进行收集
multiline 多行模块

Elasticsearch常用插件集合
目前项目中使用的是elasticsearch-1.5.1版本,使用到的插件如下:

  1. hq 监控,管理elasticsearch集群以及通过web界面来进行查询操作
    项目地址:https://github.com/royrusso/elasticsearch-HQ
  2. analysis-ik ik分词器,中文分词
    项目地址:https://github.com/medcl/elasticsearch-analysis-ik
  3. bigdesk 统计分析和图表化elasticsearch集群状态信息
    项目地址:https://github.com/lukas-vlcek/bigdesk
  4. head 最实用的通过web界面来查看elasticsearch集群状态信息
    项目地址:https://github.com/mobz/elasticsearch-head
  5. inquisitor 一个帮助调试查询语句细节的工具
    项目地址:https://github.com/polyfractal/elasticsearch-inquisitor
  6. marvel 超赞的一个通过json查询的工具,可惜是收费项目,非开源
    项目地址:https://www.elastic.co/downloads/marvel
  7. sql 一款国人写的通过类似sql语法进行查询的工具
    项目地址:https://github.com/NLPchina/elasticsearch-sql
  8. kopf 一个通过web界面来管理和监控elasticsearch集群状态信息
    项目地址:https://github.com/lmenezes/elasticsearch-kopf

Kibana

kibana的安装

kibana可以是一台独立服务器
  cd /usr/local/src  #进入源码常用的安装目录
  wget https://download.elastic.co/kibana/kibana/kibana-4.3.1-linux-x64.tar.gz  #下载源码包 
  tar zxf kibana-4.3.1-linux-x64.tar.gz #解压
  mv kibana-4.3.1-linux-x64.tar.gz /usr/local #修改路径
  ln -s /usr/local/kibana-4.3.1-linux-x64  /usr/local/kibana  #创建软连接

修改配置文件:
pwd   /usr/local/kibana/config
cp kibana.yml  kibana.yml.bak

vim kibana.yml
   server.port:5601
   server.host:"0.0.0.0"
   elasticsearch.url:"http://192.168.1.160:9200"
   kibana.index:".kibana"

运行
  因为要一直运行在前台,要么选择开一个窗口不动,要么选择使用screen 
  安装并使用screen 启动 kibana
   yum  -y install screen
   screen  #这样就另开启了一个终端窗口
   /usr/local/kibana/bin/kibana
   如果遇到终端关闭
  ctrl+a+d 键 暂时断开screen 会话
  这样在上面另启的scree 屏里启动的kibana服务就一直运行在前台了...
   screen -ls  screen连接信息

注: screen 重连会话 ,下面显示有两个处于detached状态的screen会话,可以使用screen -r <screen_pid> 重新连接上
[root@breeze root]# screen -ls
    There are screens on:
       8736.pts-1.breeze  (Detached)
       8462.pts-0.breeze  (Detached)
    2 Sockets in/root/.screen.
 [root@breeze root]# screen -r 8736

访问kibana

http://192.168.0.111:5601 #ip为部署kibana的IP地址或域名
indices(index的复数 ) 如果是添加上面设置的java日志手机信息,则在下面填写es-error* ; 如果是添加上面设置的系统日志信息system* ,以此类型(可以从logstash界面看到日志收集项)

添加索引名称

然后点击上面的discover 在discover中查看:

查看日志登录,需要点击discover –>message,点击它后面的add
elasticsearch+redis 扩展

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据