快乐崇拜的技术博客

ELK环境搭建(原创)

基本环境

Linux系统

  • elasticsearch-2.4.2.tar.gz
  • logstash-2.4.1.tar.gz
  • kibana-4.6.3-linux-x86_64.tar.gz

基本概念

本节内容摘自http://baidu.blog.51cto.com/71938/1676798

  日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
  通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和    效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。
集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。
开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。官方网站:https://www.elastic.co/products
  • Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
  • Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索)。
  • kibana 也是一个开源和免费的工具,他Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、 分析和搜索重要数据日志。

工作原理如下如所示:

在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到logstash indexer,logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。

elasticsearch集群安装

下载地址

https://www.elastic.co/products/elasticsearch

解压

1
2
3
tar -zxvf elasticsearch-2.4.2.tar.gz
mv elasticsearch-2.4.2 elasticsearch-2.4.2_1
cd elasticsearch-2.4.2_1/config

安装head插件

1
./bin/plugin install mobz/elasticsearch-head

配置config

这里集群包含3台服务器

elasticsearch-2.4.2_1的配置

1
2
3
4
5
6
7
8
9
10
11
cluster.name: es-cluster
node.name: node-1
network.host: 你的服务器ip地址
http.port: 9211
transport.tcp.port: 9311
#过期时间
index.cache.field.expire: 1d
#默认类型为resident, 字面意思是常驻(居民), 一直增加,直到内存 耗尽。 改为soft就是当内存不足的时候,先clear掉 占用的,然后再 往内存中放。设置为soft后,相当于设置成了相对的内存大小。resident的话,除非内存够大。
index.cache.field.type: soft
#可能是因为我使用的服务器已经有了一个elasticsearch集群的原因,这里不写集群地址,集群启动后无法建立,原因待查
discovery.zen.ping.unicast.hosts: ["你的服务器列表(TCP端口哦)", "你的服务器列表(TCP端口哦)","你的服务器列表(TCP端口哦)"]

elasticsearch-2.4.2_21的配置(只写了不同的部分)

1
2
3
node.name: node-2
http.port: 9212
transport.tcp.port: 9312

elasticsearch-2.4.2_3的配置(只写了不同的部分)

1
2
3
node.name: node-3
http.port: 9213
transport.tcp.port: 9313

后台启动3台服务器:

1
./bin/elasticsearch &

注意要讲elasticsearch所有文件用户赋给elasticsearch用户,否则没权限。
这是出于系统安全考虑设置的条件。由于ElasticSearch可以接收用户输入的脚本并且执行,为了系统安全考虑。
chown -R elasticsearch elasticsearch2.4.0

如果出现curl 127.0.0.1:9211可以正常访问,curl 本机IP地址:9211不能访问的问题,则需要在conf文件中配置network.host: 你的服务器ip地址。参考:ss -l命令

安装logstash

修改配置文件

  1. 读取文件方式
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    input {
    file {
    type => "infolog"
    #监听文件的路径
    path => "你的日志路径*.log"
    }
    file {
    type => "errorlog"
    #监听文件的路径
    path => "你的日志路径*.log"
    }
    }
    filter {
    multiline {
    pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
    negate => true
    what => "previous"
    }
    }
    output {
    if [type] == "infolog" {
    elasticsearch {
    action => "index" #The operation on ES
    hosts => ["elasticsearch的IP地址:9211", "elasticsearch的IP地址:9212","elasticsearch的IP地址:9213"] #ElasticSearch host, can be array.
    index => "apilog" #The index to write data to.
    }
    }else{
    elasticsearch {
    action => "index" #The operation on ES
    hosts => ["elasticsearch的IP地址:9211", "elasticsearch的IP地址:9212","elasticsearch的IP地址:9213"] #ElasticSearch host, can be array.
    index => "apierrorlog" #The index to write data to.
    }
    }
    }
  • 说明:multiline的作用是为了处理错误日志的,使得错误堆栈信息作为一条记录显示。这里可能导致无法创建多线程,只能以单线程运行,解决办法参考我的另一篇文章ELK 之 nginx日志分析
    1
    2
    3
    4
    5
    6
    7
    filter {
    multiline {
    pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}"
    negate => true
    what => "previous"
    }
    }
  1. 还可以直接与log4j配合使用,直接将日志输出到logstash中
    1
    2
    3
    4
    5
    6
    7
    8
    9
    log4j.logger.包名=debug, socket
    # appender socket
    log4j.appender.socket=org.apache.log4j.net.SocketAppender
    log4j.appender.socket.Port=${elk_port}
    log4j.appender.socket.RemoteHost=${elk_ip}
    log4j.appender.socket.layout=org.apache.log4j.PatternLayout
    log4j.appender.socket.layout.ConversionPattern=%d [%-5p] [%l] %m%n
    log4j.appender.socket.ReconnectionDelay=10000

启动服务

1
./bin/logstash agent -f config/log4j_to_es.conf &

安装kibana

修改配置

1
2
3
4
server.port: 5601
server.host: "你的IP地址"
elasticsearch.url: "http://你的IP地址:9211"
kibana.index: ".kibana"

后台启动

1
nohup bin/kibana &

但是nohup在使用时还需要注意一些问题:
1、当输入nohup COMMAND & 命令后,需要按任意键返回到shell窗口
2、退出当前登录窗口用exit命令,不要直接点击窗口上的叉来关闭

配置索引

进入kibana,配置好在logstash中配置的索引


到此为止,ELK环境搭建完毕。
后续会继续写ELK的具体使用教程,敬请期待

参考资料


坚持原创技术分享,您的支持将鼓励我继续创作!
本人原创文章会有“原创”字样,转发会标注“转发”以及出处
liubenlong WeChat Pay

微信打赏

liubenlong Alipay

支付宝打赏

热评文章