MyException - 我的异常网
当前位置:我的异常网» 研发管理 » ELK实时日志分析平台的筹建部署及使用

ELK实时日志分析平台的筹建部署及使用

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


ELK架构图

Elasticsearch下载地址:https://www.elastic.co/downloads/elasticsearch(目前最新版本:5.4.3)
Logstash下载地址:https://www.elastic.co/downloads/logstash(目前最新版本:5.4.3)
Kibana下载地址:https://www.elastic.co/downloads/kibana(目前最新版本:5.4.3)

1.2 Java 8
elasticsearch 推荐使用java8,所以先安装好java8。

1.3 Elasticsearch
elasticsearch的安全机制不允许用root用户启动,故新建用户elk:elk。
以elk用户启动elasticsearch:
$ su - elk
$ elasticsearch-5.4.3/bin/elasticsearch &

安装结束后:curl localhost:9200 返回如下内容表示安装成功。
{
  "name" : "aQgGH94",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "BjFsa-KxQdSnP58Enrr6NA",
  "version" : {
    "number" : "5.4.3",
    "build_hash" : "eed30a8",
    "build_date" : "2017-06-22T00:34:03.743Z",
    "build_snapshot" : false,
    "lucene_version" : "6.5.1"
  },
  "tagline" : "You Know, for Search"
}


安装过程中可能会出现的问题及解决:http://blog.csdn.net/leehbing/article/details/74627134

1.4 Kibana
修改配置文件kibana-5.4.3-linux-x86_64/config/kibana.yml:
# The Elasticsearch instance to use for all your queries.
elasticsearch.url: "http://localhost:9200"

执行:
$ su – elk
$ ./kibana


1.5 Nginx
前面kibana只能采用localhost访问,这里利用反向代理使其他机器可以访问,本文利用nginx来达到这一目的。
修改配置文件nginx/nginx.conf:
将默认的server{}这一段去掉,添加:include conf.d/*.conf;
$ vi nginx/conf.d/kibana.conf

server {
    listen 80;

    server_name bogon;     #机器的hostname

#    auth_basic "Restricted Access";
#    auth_basic_user_file /etc/nginx/htpasswd.users;

    location / {
        proxy_pass http://localhost:5601;     #范文kibana的地址
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

$ ./nginx/sbin/nginx   #启动nginx


1.6 Logstash

其实它就是一个收集器而已,我们需要为它指定Input和Output(当然Input和Output可以为多个)。

新建索引配置文件
$ cd logstash-5.4.3/bin
$ mkdir conf
$ vi conf/logstash-indexer.conf

input {
 file {
   path => ["/var/opt/log/a.log","/var/opt/log/b.log"]
 }
}

output {
  elasticsearch { hosts => ["localhost:9200"] }
  stdout { codec => rubydebug }
}


上面几个步骤的意思就是创建一个名为logstash-indexer.conf的配置文件,input{file{...}}部分指定的是日志文件的位置(可以多个文件),一般来说就是应用程序log4j输出的日志文件。output部分则是表示将日志文件的内容保存到elasticsearch,这里hosts对应的是一个数组,可以设置多个elasticsearch主机,相当于一份日志文件的内容,可以保存到多个elasticsearch中。stdout,则表示终端的标准输出,方便部署时验证是否正常运行,验证通过后,可以去掉。
$ ./logstash -f conf/logstash-indexer.conf    #启动logstash


稍等片刻,如果看到Logstash startup completed,则表示启动成功。然后另开一个终端窗口,随便找个文本编辑工具(比如:vi),向/var/opt/log/a.log里写点东西,比如:hello world之类,然后保存。观察logstash的终端运行窗口,是否有东西输出,如果有以下类似输出:
{
        "path" => "/var/opt/log/a.log",
    	"@timestamp" => 2017-07-09T03:17:28.001Z,
      	"@version" => "1",
        "host" => "bogon",
       	"message" => "hello word"
}

在浏览器中输入http://192.168.1.139,即会跳转至kibana页面,首次运行,会提示创建index,直接点击Create按钮即可。


二、 应用场景示例
2.1 收集多个服务器的日志
在客户服务器安装Filebeat,将日志发送给logstash。

2.1.1 生成SSL认证
因为要使用Filebeat将日志从客户端发送到ELK,所以需要创建SSL认证和秘钥对。Filebeat会使用该认证来识别ELK。有两种方法来生成SSL认证。如果已经有DNS设置,即可以使客户端识别ELK服务端的IP地址,使用第二种方法,否则使用第一种方法。
第一种方法:IP地址
如果没有DNS设置(DNS的设置可以让产生日志的客户端服务器来识别ELK服务器的IP地址),必须将ELK服务器的IP地址添加到SSL认证的subjectAltName(SAN)域中。
$ vi /etc/pki/tls/openssl.cnf    #编辑OpenSSl的配置文件
找到[ v3_ca ]段,在其下加入subjectAltName = IP: ELK_server_private_ip(ELK_server_private_ip为ELK的IP地址)

利用以下命令来生成SSL认证以及私钥
$ cd /etc/pki/tls   #在/etc/pki/tls/目录下
$ openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

生成的logstash-forwarder.crt文件将被拷贝到所有发送日志给logstash的服务器上。

第二种方法:FQDN (DNS)
直接利用以下命令来生成SSL认证以及私钥(在/etc/pki/tls/目录下)(ELK_server_fqdn:ELK服务器的FQDN)
$ cd /etc/pki/tls
$ openssl req -subj '/CN=ELK_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt


2.1.2 配置logstash

Logstash的配置文件采用json的格式,配置文件包括三个部分:inputs,filters,outputs。
$ vi bin/conf/02-beats-input.conf

input {
  beats {
    port => 5044
    ssl => true
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

描述一个beats输入,监听tcp端口5044,并且会利用前面创建的ssl认证即秘钥

$ vi bin/conf/10-syslog-filter.conf

filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

对syslog类型(Filebeat进行标记)的日志进行过滤,并利用grok将输入的syslog日志解析
以使之结构化并且利于查询。
$ vi bin/conf/30-elasticsearch-output.conf

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    sniffing => true
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

将beats数据存储到elasticsearch(localhost:9200)并设置了index和type
如果要为其他使用Filebeats输入的应用添加filter,请确保将这些文件正确命名,以使该文件的顺序位于input和output文件之间(比如在02-和30-之间)

2.1.3 加载kibana仪表盘
elastic提供了一些kibana仪表盘和Beats索引模式的样例,虽然本文不会使用这些仪表盘,但是还是会加载这些仪表盘,因为我们可以使用它们包含的Filebeat索引模式。
下载仪表盘样例文件:
$ curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.1.0.zip
$ yum -y install unzip               #安装unzip
$ unzip beats-dashboards-*.zip
$ cd beats-dashboards-*
$./load.sh                       #加载仪表盘样例

刚刚加载了如下索引模式:
[packetbeat-]YYYY.MM.DD
[topbeat-]YYYY.MM.DD
[filebeat-]YYYY.MM.DD
[winlogbeat-]YYYY.MM.DD
当使用kibana的时候,将选择Filebeat索引模式作为默认。

2.1.4 加载Filebeat索引模板

因为打算使用FIlebeats来将日志送至elasticsearch,应该加载Filebeat索引模板。这个索引模板将会配置elasticsearch以机智的方式来分析送进来的Filebeat字段。
$ curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json  #下载Filebeat索引模板
$ curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json  #加载此模板

现在ELK服务器已经准备好接受Filebeat数据。


2.1.5 在Client主机上安装FileBeat软件包

复制SSL认证
在ELK服务器上,拷贝之前创建的SSL证书到客户端服务器上。
$ scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp

在客户机上:
$ mkdir -p /etc/pki/tls/certs
$ cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

安装Filebeat包
准备好filebeat-5.5.0-linux-x86_64.tar.gz

配置Filebeat
配置Filebeat来连接到Logstash
在客户服务器上:
$ vi filebeat/filebeat.yml

filebeat:
  prospectors:  #定义了哪些日志文件可以被传送给Logstash,并且该如何处理它们
     -	       #表示开始定义prospector
      paths:
        - /var/log/secure   #表示传送secure和messages日志
        - /var/log/messages
      #  - /var/log/*.log
      
      input_type: log
      
      document_type: syslog #传送的日志类型为syslog,其也是Logstash过滤器配置的

  registry_file: /var/lib/filebeat/registry

output:
  logstash:
    hosts: ["elk_server_private_ip:5044"]  #ELK服务器的IP,发送至Loastash
    bulk_max_size: 1024

tls:
# List of root certificates for HTTPS server verifications
      certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

shipper:

logging:
  files:
    rotateeverybytes: 10485760 # = 10MB


注意,Filebeat的配置文件是YAML格式的,所以空格数是很重要的。

现在Filebeat就会发送客户服务器上的syslog messages and secure文件到ELK服务器!其他的客户端服务器一样配置。

2.2 kibana案例数据
这里直接将数据导入elasticsearch,即假设数据源的数据已经存储到elasticsearch中,然后利用kibana来对数据进行可视化。
导入以下三种数据:
   1. 莎士比亚的所有著作,合适地解析成了各个字段:shakespeare.json。
   2. 随机生成的虚构账号数据:accounts.json
   3.  随机生成的日志文件:logs.jsonl
shakespear.json的数据格式如下:
{
        "line_id": INT,
        "play_name": "String",
        "speech_number": INT,
        "line_number": "String",
        "speaker": "String",
        "text_entry": "String",
        } 


accounts.json的数据格式如下:
{
        "account_number": INT,
        "balance": INT,
        "firstname": "String",
        "lastname": "String",
        "age": INT,
        "gender": "M or F",
        "address": "String",
        "employer": "String",
        "email": "String",
        "city": "String",
        "state": "String"
        }  


logs.jsonl的主要数据格式如下:
{
        "memory": INT,
        "geo.coordinates": "geo_point"
        "@timestamp": "date"
        } 


在kibana界面建立三个索引模式,分别对应刚刚导入es的索引:
logstash-2015.05*   ->   logs.jsonl  
bank*             ->   account.json
shakes*            ->   shakespear

然后利用kibana的visualize功能可定制如下图表展示:


图账户落在不同薪水范围的比率,最外圈表示按薪水所有者的年龄拆分


图每个剧台前幕后的数量


图可视化一些地理数据

推荐一款开源私有化部署的移动应用数据统计分析系统Cobub Razor
项目地址:https://github.com/cobub/razor
官网:www.cobub.com

本文原创首发于Cobub官网博客,作者:李红兵
如有转载请注明作者和出处!

文章评论

为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
 程序员的样子
程序员的样子
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
一个程序员的时间管理
一个程序员的时间管理
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
每天工作4小时的程序员
每天工作4小时的程序员
程序员应该关注的一些事儿
程序员应该关注的一些事儿
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
我的丈夫是个程序员
我的丈夫是个程序员
我是如何打败拖延症的
我是如何打败拖延症的
那些争议最大的编程观点
那些争议最大的编程观点
漫画:程序员的工作
漫画:程序员的工作
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序员和编码员之间的区别
程序员和编码员之间的区别
10个调试和排错的小建议
10个调试和排错的小建议
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
为什么程序员都是夜猫子
为什么程序员都是夜猫子
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
中美印日四国程序员比较
中美印日四国程序员比较
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
老程序员的下场
老程序员的下场
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员都该阅读的书
程序员都该阅读的书
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
总结2014中国互联网十大段子
总结2014中国互联网十大段子
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
鲜为人知的编程真相
鲜为人知的编程真相
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
代码女神横空出世
代码女神横空出世
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有