CentOS7搭建ELK日志集中分析平台

以往运维人员在分析日志的时候,相信大家用的最多的方法就是逐个登陆到服务器上面使用sed和awk工具分析,或者撸一个shell脚本或者Python脚本来分析日志。但是此方法不单不直观,而且效率很低。通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,那你就有得玩了,虽然有像Ansible这样的自动化工具,但也不会很高效。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。例如:开源的syslog,将所有服务器上的日志收集汇总。

集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。


ELK介绍

开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。官方网站:https://www.elastic.co/products

  • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  • Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
  • Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

下图是elk工作原理

如图:Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES(或者单机)集群中查询数据生成图表,再返回给Browser。

ELK平台搭建

一般ELK平台分为集群和单机,由于手头机器资源部够,所以本篇文章中以单机搭建为例。

1.系统环境

  • System: CentOS Linux release 7.1.1503 (Core)
  • ElasticSearch: 5.5.2
  • Logstash: 5.5.2
  • Kibana: 5.5.2
  • Java: openjdk version “1.8.0_141”

注:由于Logstash的运行依赖于Java环境, 而Logstash 1.5以上版本不低于java 1.7,因此推荐使用最新版本的Java。因为我们只需要Java的运行环境,所以可以只安装JRE,不过这里我依然使用JDK,请自行搜索安装。

2.ELK软件下载

[root@tokyo software]# ls
elasticsearch-5.5.2.rpm  kibana-5.5.2-x86_64.rpm  logstash-5.5.2.rpm

3.Elasticsearch安装配置

[root@tokyo software]# rpm -ivh elasticsearch-5.5.2.rpm 
[root@tokyo software]# vim /etc/elasticsearch/elasticsearch.yml  #elasticsearch主配置文件
# ---------------------------------- Cluster (集群配置)-----------------------------------
#
# Use a descriptive name for your cluster:
#
#cluster.name: my-application  #集群名称
# ------------------------------------ Node(节点配置) ------------------------------------
#
# Use a descriptive name for the node:
#
#node.name: node-1  #节点名称
#
# Add custom attributes to the node:
#
#node.attr.rack: r1
# ----------------------------------- Paths (目录路径配置) ------------------------------------
# 
# Path to directory where to store the data (separate multiple locations by comma):
#
#path.data: /path/to/data #数据存放目录
#
# Path to log files:
#
#path.logs: /path/to/logs #日志存放目录
#
# ----------------------------------- Memory (内存配置) -----------------------------------
#
# Lock the memory on startup:
#
#bootstrap.memory_lock: true
#
# Make sure that the heap size is set to about half the memory available
# on the system and that the owner of the process is allowed to use this
# limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network (网络配置)-----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
#network.host: 192.168.0.1 #配置监听IP地址
#
# Set a custom port for HTTP:
#
#http.port: 9200  #配置监听端口
#
# For more information, consult the network module documentation.
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#
#discovery.zen.ping.unicast.hosts: ["host1", "host2"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of master-eligible nodes / 2 + 1):
#
#discovery.zen.minimum_master_nodes: 3
#
# For more information, consult the zen discovery module documentation.
#
# ---------------------------------- Gateway -----------------------------------
#
# Block initial recovery after a full cluster restart until N nodes are started:
#
#gateway.recover_after_nodes: 3
#
# For more information, consult the gateway module documentation.
#
# ---------------------------------- Various -----------------------------------
#
# Require explicit names when deleting indices:
#
#action.destructive_requires_name: true

3.Logstash安装配置

其实它就是一个收集器而已,我们需要为它指定Input和Output(当然Input和Output可以为多个)。由于我们需要把Java代码中Log4j的日志输出到ElasticSearch中,因此这里的Input就是Log4j,而Output就是ElasticSearch。

[root@tokyo software]# rpm -ivh logstash-5.5.2.rpm 
[root@tokyo software]# vim /etc/logstash/conf.d/logstash-svr.conf # 定义logstash配置文件
# 定义日志来源
input {
  file {
    path => ["/data/wwwlogs/logstash_json.log"] #定义日志来源
    type => "nginx"  # 定义日志类型
    codec => json  # 定义日志编码格式
  }
}
# 对日志进行格式化(切片)
filter {
    mutate {
        split => [ "upstreamtime", "," ]
    }
    mutate {
        convert => [ "upstreamtime", "float" ]
    }
    geoip {
        source => "clientip"
        fields => ["ip","city_name","country_name"]
    }
}
# 定义日志输出目的地
output {
  elasticsearch {
  hosts => ["localhost:9200"]
  index => "logstash-%{+YYYY.MM.dd}"
        }
}

配置好了之后,可以使用logstash的命令测试一下配置文件是否无误。

[root@tokyo logstash]#  ./bin/logstash  -f /etc/logstash/conf.d/logstash-svr.conf

4.Kibana安装配置

[root@tokyo software]# rpm -ivh kibana-5.5.2-x86_64.rpm 

kibana一般会配置三个地方,根据自己的情况,参照如下配置。

#server.port: 5601 #配置kibana监听端口
 
# The URL of the Elasticsearch instance to use for all your queries.
#elasticsearch.url: "http://localhost:9200"
elasticsearch.url: "http://localhost:9200" #配置elasticsearch的地址和端口
 
# 如果安装了x-pack的话(后续再单独说),需要在这里配置elasticsearch的账号密码
# is proxied through the Kibana server.
#elasticsearch.username: "user"   
#elasticsearch.password: "pass"

此刻,您应该可以使用http://IP+5601访问到kibana了。

结束语

限于篇幅,此文中只是介绍了ELK和ELK的安装配置。在实际的工作中,其实他们都是可以相对自由组合,这些就不在本文介绍了。本人也是刚刚接触elk没多久,文中如有谬误,望请各位大神批评指正。

参考资料:

  • IBM官方:https://www.ibm.com/developerworks/cn/opensource/os-cn-elk/
  • 让编程成为一种习惯:http://www.cnblogs.com/beautiful-code/p/6125584.html
  • hello dog:https://wsgzao.github.io/post/elk/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

在Python中使用Elasticsearch

在这篇文章中,我将讨论Elasticsearch以及如何将其整合到不同的Python应用程序中。

41000
来自专栏微服务生态

性能分析系列-小命令保证大性能

最近在工作中经常和性能压测工作打交道,积累了一些性能分析经验,我觉得这些经验对每一个开发者都有帮助的,能开发出性能高的代码也是我们的最终目标。

11450
来自专栏北京马哥教育

一万两千字长文,六大问题为你解读计算机

1描述计算机的组成及其功能 电子计算机,亦称电脑,是一种利用电子学原理,根据一系列指令对数据进行处理的工具 计算机及其组成 计算机是什么       电子计...

393100
来自专栏ml

c/c++----网站及其后门(CGI应用程序)

      C/C++学习到这儿,结合自己曾经学过的javasweb知识,现在让我们来看看,如何做一个CGI程序吧!       首先了解一下啥子叫CGI  :...

37140
来自专栏技术翻译

Elasticsearch文档和映射

在Elasticsearch的说法中,文档是序列化的JSON数据。在典型的ELK设置中,当您发送日志或度量标准时,它通常会发送到Logstash,Logstas...

20010
来自专栏娱乐心理测试

小程序的网络请求封装

59770
来自专栏编程

重构的些许收获

题图:Pixabay 这个项目开始之初,赶时间上线。很多地方基本没怎么管代码规范,直到一期完毕回过头来看之前写的代码,不忍直视。为了之后接手的人能更加轻松,也为...

205100
来自专栏智能大石头

NewLife.Net——构建可靠的网络服务

老规矩,先上源码:https://github.com/nnhy/NewLife.Net.Tests

13000
来自专栏程序员笔记

Elasticsearch 入门: _bulk 批量导入数据

40740
来自专栏北京马哥教育

原创投稿 | 结合docker快速搭建启动ELK日志收集平台

豌豆贴心提醒,本文阅读时间7分钟 ELK Stack ELK (Elasticsearch + Logstash + Kibana),是一个开源的日志收集平...

519110

扫码关注云+社区

领取腾讯云代金券