ELK(一)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

解压

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插件

./bin/plugin install mobz/elasticsearch-head

配置config

这里集群包含3台服务器

elasticsearch-2.4.2_1的配置

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的配置(只写了不同的部分)

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

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

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

后台启动3台服务器:

./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. 读取文件方式
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_%{+YYYY.MM.dd}"         #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_%{+YYYY.MM.dd}"         #The index to write data to.
        }
    }
}
  • 说明:multiline的作用是为了处理错误日志的,使得错误堆栈信息作为一条记录显示。这里可能导致无法创建多线程,只能以单线程运行,解决办法参考我的另一篇文章ELK 之 nginx日志分析
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中
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

启动服务

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

安装kibana

修改配置

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

后台启动

nohup bin/kibana &

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

配置索引

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

定时清理ES索引数据

  • 编写清理脚本

参考资料 elasticsearch的索引自动清理及自定义清理

LAST_DATA=`date -d '-3 day' +%Y.%m.%d`
echo${LAST_DATA}  开始执行删除操作“
curl -XDELETE 'http://10.104.29.19:9211/*'${LAST_DATA}''
echo "${LAST_DATA}  执行完毕。"

文件名为: es-index-clear.sh

  • 设置定时任务

输入crontab -e,出现vi编辑页面
输入以下命令,每天两点10分执行sh文件:

10 2 */1 * * /letv/soft/elk/logstash-2.4.1/bin/es-index-clear.sh

保存退出即可。


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

参考资料

©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值