Site
Site
文章目录
  1. Description
  2. ELK搭建
    1. ES安装
    2. ES配置
    3. Kibana安装配置
    4. Logstash安装
    5. Logstash配置
    6. kibana上查看日志

ELK(上)

Description

当我们的业务发展越来越庞大,服务器越来越多
各种访问日志、应用日志、错误日志量也越来越多,便会导致运维人员无法有效管理日志
开发人员排查问题,查询日志不高效,这个时候我们便需要ELK。

为什么要用到ELK:

一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大也就是日志量多而复杂的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

大型系统通常都是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

一个完整的集中式日志系统,需要包含以下几个主要特点:

收集-能够采集多种来源的日志数据
传输-能够稳定的把日志数据传输到中央系统
存储-如何存储日志数据
分析-可以支持 UI 分析
警告-能够提供错误报告,监控机制
而ELK则提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。是目前主流的一种日志系统。

ELK是三个开源软件的缩写,分别为:Elasticsearch 、 Logstash以及Kibana , 它们都是开源软件。不过现在还新增了一个Beats,它是一个轻量级的日志收集处理工具(Agent),Beats占用资源少,适合于在各个服务器上搜集日志后传输给Logstash。

ELK包含:

  • Elasticsearch:开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

  • Logstash:日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。

  • Kibana :为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,汇总、分析和搜索重要数据日志。

  • Beats:轻量级日志采集器。

ELK搭建

ES安装

官方文档

[root@master-test ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[root@master-test ~]# vim /etc/yum.repos.d/elastic.repo
#进入文件后增加以下内容
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
[root@master-node ~]# yum install -y elasticsearch

主节点和子节点都要安装

ES配置

[root@master-test ~]# vim /etc/elasticsearch/elasticsearch.yml
#增加以下内容
cluster.name: master-test  #集群中的名称
node.name: master  #该节点名称
node.master: true  #意思是该节点为主节点
node.data: false  #表示这不是数据节点
network.host: 0.0.0.0  #监听全部ip,在实际环境中应设置为一个安全的ip
http.port: 9200  #es服务的端口号
discovery.zen.ping.unicast.hosts: ["192.168.23.11", "192.168.23.12", "192.168.23.13"] #配置自动发现
[root@master-test ~]# 

集群需要额外步骤

#发送文件到节点机器
[root@master-test ~]# scp /etc/elasticsearch/elasticsearch.yml data-node1:/tmp/

#修改配置
[root@data-test ~]# vim /tmp/elasticsearch.yml 
node.name: data-test2
node.master: false
node.data: true
[root@data-test ~]# cp /tmp/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml 
cp: overwrite ‘/etc/elasticsearch/elasticsearch.yml’? yes
[root@data-test ~]# 
然后启动主节点和子节点es服务,然后通过curl查看集群情况 

#健康情况
curl '192.168.23.11:9200/_cluster/health?pretty'
#详细信息
curl '192.168.23.11:9200/_cluster/state?pretty'

Kibana安装配置

[root@master-test ~]# yum -y install kibana 

配置

[root@master-test ~]# vim /etc/kibana/kibana.yml
#增加以下内容  
server.port: 5601  #配置kibana的端口
server.host: 192.168.23.11  #配置监听ip
elasticsearch.url: "http://192.168.23.11:9200"  #配置es服务器的ip,集群则配置该集群中主节点的ip
logging.dest: /var/log/kibana.log  #配置kibana的日志文件路径

创建日志文件

[root@master-test ~]# touch /var/log/kibana.log; chmod 777 /var/log/kibana.log

启动kibana服务,并检查进程和监听端口

[root@master-test ~]# systemctl start kibana
[root@master-test ~]# ps aux |grep kibana
[root@master-test ~]# netstat -lntp |grep port

然后在浏览器里进行访问,http://192.168.23.11:5601/,验证是否成功

Logstash安装

192.168.23.13上安装logstash

[root@data-test ~]# yum install -y  logstash

配置logstash收集syslog日志

[root@data-test ~]# vim /etc/logstash/conf.d/syslog.conf  
#添加以下内容
input {  #定义日志源
  syslog {
    type => "system-syslog"  #定义类型
    port => 10088    #定义监听端口
  }
}
output {  #定义日志输出
  stdout {
    codec => rubydebug  #将日志输出到当前的终端上显示,方便测试
  }
}

检查配置

[root@data-test ~]# cd /usr/share/logstash/bin
[root@data-test /usr/share/logstash/bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK  #为ok则代表配置文件没有问题
[root@data-test /usr/share/logstash/bin]# 

配置ip以及监听端口:

[root@data-test ~]# vim /etc/rsyslog.conf
#### RULES ####

*.* @@192.168.23.13:11081
重启rsyslog,让配置生效:

[root@data-test ~]# systemctl restart rsyslog
指定配置文件,启动logstash:

[root@data-test ~]# cd /usr/share/logstash/bin
[root@data-test /usr/share/logstash/bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
#这时终端会停留在这里,因为我们在配置文件中定义的是将信息输出到当前终端,使用监听的节点机器ssh查看是否有日志打印

Logstash配置

让收集的日志信息输出到es服务器中,而不是当前终端

[root@data-test ~]# vim /etc/logstash/conf.d/syslog.conf 
#更改
input {
  syslog {
    type => "system-syslog"
    port => 11081
  }
}
output {
  elasticsearch {
    hosts => ["192.168.23.11:9200"]  #定义es服务器的ip
    index => "system-syslog-%{+YYYY.MM}" # 定义索引
    document_id => "%{主键字段}
  }
}

检查配置,无误后启动

[root@data-test ~]# systemctl start logstash
[root@data-test ~]# ps aux |grep logstash

如果有端口未被监听,查看messages的日志,看是否为权限问题

kibana上查看日志

完成了logstash服务器的搭建之后,回到kibana服务器上查看日志,执行以下命令可以获取索引信息:

[root@master-test ~]# curl '192.168.23.11:9200/_cat/indices?v'
health status index                 uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana               6JfXc0gFSPOWq9gJI1ZX2g   1   1          1            0      6.9kb          3.6kb
green  open   system-syslog-2018.03 bUXmEDskTh6fjGD3JgyHcA   5   1         61            0    593.7kb        286.7kb
[root@master-test ~]# 

如上,可以看到,在logstash配置文件中定义的system-syslog索引成功获取到了,证明配置没问题,logstash与es通信正常,然后到kibana上配置索引通配符即可

支持一下
扫一扫,支持xfan
  • 微信扫一扫
  • 支付宝扫一扫