一、ELK简介

Elk是指logstash,elasticsearch,kibana三件套,我们一般使用它们做日志分析。

ELK工作原理图:

简单来讲ELK具体的工作流程就是客户端的logstash agent(shipper)从日志里取出数据推送到服务端的redis里,服务端的logstash从redis里取出数据推送到elasticsearch并产生索引,然后使用Kibana进行页面展示。

二.ELK准备环境配置

1.搭建环境(都是在Centos6.8系统下操作完成):
  Ip地址                节点                  部署服务        
  192.168.100.10        ELK-node1                elasticsearch + logstrsh
  192.168.100.20        ELK-node2                elasticsearch + redis + kibana
  192.168.100.30       nginx-agent               nginx + logstash

2.软件下载地址及版本:

  1. cd /usr/local/src/
  2. wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.0/elasticsearch-2.3.0.tar.gz
  3. wget https://download.elastic.co/logstash/logstash/logstash-1.5.4.tar.gz
  4. curl -L -O https://download.elastic.co/kibana/kibana/kibana-4.5.1-linux-x64.tar.gz
  5. wget http://download.redis.io/releases/redis-3.0.7.tar.gz

3.各服务器安装jdk,jdk要1.7以上的版本.

  1. rpm -ivh jre-8u91-linux-x64.rpm

node1 node2 节点部署elasticsearch + logstrsh.

1.安装elasticsearch

  1. cd /usr/local/src/
  2. wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.0/elasticsearch-2.3.0.tar.gz
  3.  
  4. tar -zxvf elasticsearch-2.3.0.tar.gz -C /usr/local/
  5. ln -s elasticsearch-2.3.0 elasticsearch
  6. mkdir -pv /usr/local/elasticsearch/data
  7. mkdir -pv /usr/local/elasticsearch/logs //日志文件目录
  8.  
  9. #主节点配置如下:
  10. grep '^[a-z]' elasticsearch.yml
  11. cluster.name: ELK-elasticsearch
  12. node.name: node-1
  13. path.data: /usr/local/elasticsearch/data
  14. path.logs: /usr/local/elasticsearch/logs
  15. bootstrap.mlockall: true
  16. network.host: 192.168.100.10
  17. http.port: 9200
  18. node.master: true
  19. node.data: true
  20.  
  21. #集群节点参数详解:
  22. https://my.oschina.net/liuxundemo/blog/688736?p={{page}}
  23.  
  24. 启动elasticsearch:
  25. elasticsearch只能以普通用户运行
  26.  
  27. 创建elasticsearch运行用户,es只能用普通用户启动.
  28. groupadd elasticsearch
  29. useradd -g elasticsearch elasticsearch
  30. chown -R elasticsearch:elasticsearch /usr/local/elasticsearch
  31. /usr/local/elasticsearch/bin/elasticsearch >/dev/null 2>&1 &
  32.  
  33. 服务管理的插件:
  34. elasticsearch的插件应用
  35. http://www.cnblogs.com/xing901022/p/5962722.html
  36.  
  37. 安装集群管理插件:
  38. /usr/local/elasticsearch/bin/plugin install mobz/elasticsearch-head
  39. http://192.168.100.10:9200/_plugin/head/
  40.  
  41. health状况:
  42.  
  43. curl '192.168.100.10:9200/_cat/health?v'
  44. epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
  45. 1488389751 01:35:51 elasticsearch green 1 1 0 0 0 0 0 0 - 100.0%
  46.  
  47. curl -X GET http://192.168.100.10:9200 //获取网页内容
  48. curl -I GET http://192.168.100.10:9200 //获取网页头部信息,200正常

从节点192.168.100.20 node2 elasticsearch配置如下:

  1. #从节点配置如下:
  2. cluster.name: ELK-elasticsearch
  3. node.name: node-2
  4. path.data: /usr/local/elasticsearch/data
  5. path.logs: /usr/local/elasticsearch/logs
  6. bootstrap.mlockall: true
  7. network.host: 192.168.100.20
  8. http.port: 9200
  9. discovery.zen.ping.unicast.hosts: ["192.168.100.10:9300"]

LogStash部署和使用(主节点和从节点一样,只要服务启动正常即可):

  1. cd /usr/local/src/
  2. wget https://download.elastic.co/logstash/logstash/logstash-1.5.4.tar.gz
  3. [root@localhost local]# tar -zxvf logstash-1.5.4.tar.gz -C /usr/local/
  4. [root@localhost local]#ln -s logstash-1.5.4 logstash
  5. 标准输入输出:
  6. /usr/local/logstash/bin/logstash -e 'input { stdin{} } output { stdout{}}'
  7. #加东西可以改变输出:
  8. [root@localhost ~]# /usr/local/logstash/bin/logstash -e 'input { stdin{} } output { stdout{codec => rubydebug}}'
  9. #标准输出到elasticsearch中,定义host和协议
  10. /usr/local/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { host => "192.168.100.10" protocol => "http"}}'
  11. #多重输出
  12. /usr/local/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { host => "192.168.100.10" protocol => "http"} stdout{ codec => rubydebug }}'
  13. 启动logstrash
  14. /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstrash.conf
  15. #logstash解析nginx时间字段
  16. http://blog.csdn.net/jianblog/article/details/54585043
  17.  
  18. logstash配置文件编写:
  19. #文件输入到文件输出.
  20. logstash.conf
  21. input {
  22. file{
  23. path => "/var/log/messages"
  24. }
  25. }
  26. output {
  27. file {
  28. path => "/tmp/%{+YYYY-MM-dd}.messages.gz"
  29. gzip => true
  30. }
  31. }
  32. #文件输入到文件和es中
  33. input {
  34.  
  35. file{
  36. path => "/var/log/messages"
  37. }
  38. }
  39. output {
  40.  
  41. file {
  42. path => "/tmp/%{+YYYY-MM-dd}.messages.gz"
  43. gzip => true
  44. }
  45. elasticsearch {
  46. host => "192.168.100.10"
  47. protocol => "http"
  48. index => "sysem-messages-%{+YYYY.MM.dd}"
  49. }
  50.  
  51. }
  52. 启动logstrash
  53. /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/logstrash.conf

安装redis保证服务启动正常即可:

  1. wget http://download.redis.io/releases/redis-3.0.7.tar.gz
  2. tar -zxvf redis-3.0.7
  3. make && make install
  4.  
  5. [root@localhost ~]#nohup redis-server 2>&1 &
  6. [root@localhost ~]# redis-cli -h 192.168.100.20 -p 6379
  7. 192.168.21.128:6379> select 1
  8. OK
  9. 192.168.100.20:6379[1]> keys *
  10. 1) "sys-messages"
  11. 192.168.100.20:6379[1]> LLEN sys-messages #查看redis 列表的长度
  12. (integer) 42120
  13. 192.168.100.20:6379[1]> LINDEX sys-messages -1 #查看列表最后的一行
  14. "{\"message\":\"hello logstrash to redis sucess\",\"@version\":\"1\",\"@timestamp\":\"2017-02-19T02:35:44.082Z\",\"host\":\"localhost.localdomain\",\"path\":\"/var/log/messages\"}"
  15. 192.168.100.20:6379[1]>

安装kibana:

  1. 安装kibana
  2. curl -L -O https://download.elastic.co/kibana/kibana/kibana-4.5.1-linux-x64.tar.gz
  3. tar -zxvf kibana-4.5.1-linux-x64.tar.gz -C /usr/local
  4. ln -s kibana-4.5.1-linux-x64 kibana
  5. vim kibana.yml
  6. elasticsearch_url: "http://192.168.100.10:9200" #es主节点的ip地址
  7. 启动kibana服务
  8. /usr/local/kibana/bin/kibana &
  9. 访问地址:
  10. http://192.168.100.20:5601/app/kibana

在192.168.100.30 上安装nginx和logstash作为nginx日志输出端.

ELK收集Nginx日志有两种方式:

1.使用codec的json插件将日志的域进行分段,使用key-value的方式,使日志格式更清晰,易于搜索,还可以降低cpu的负载 ,更改nginx的配置文件的日志格式,使用json

2.不用修改Nginx的日志格式,通过filter过滤器来改变日志的格式.

我们这里先讲第一种方式:Nginx日志改成json输出。

logstash_nginx端的日志格式如下:

  1. [root@logstash_nginx ~]#sed -n '15,33p' /etc/nginx/nginx.conf
  2.  
  3. log_format logstash_json '{ "@timestamp": "$time_local", '
  4. '"@fields": { '
  5. '"remote_addr": "$remote_addr", '
  6. '"remote_user": "$remote_user", '
  7. '"body_bytes_sent": "$body_bytes_sent", '
  8. '"request_time": "$request_time", '
  9. '"status": "$status", '
  10. '"request": "$request", '
  11. '"request_method": "$request_method", '
  12. '"http_referrer": "$http_referer", '
  13. '"body_bytes_sent":"$body_bytes_sent", '
  14. '"http_user_agent": "$http_user_agent" , '
  15. '"http_x_forwarded_for": "$http_x_forwarded_for"} }';
  16.  
  17. access_log /var/log/nginx/access.log logstash_json;
  18. 启动nginx
  19. [root@logstash_nginx ~]# /usr/sbin/nginx -t
  20. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
  21. nginx: configuration file /etc/nginx/nginx.conf test is successful
  22.  
  23. [root@logstash_nginx ~]# /usr/sbin/nginx

logstash配置如下:

  1. #使用logstash收集nginx的访问日志
  2. #vim /usr/local/logstash/logstash-agent.conf
  3. input {
  4. file {
  5. type => "nginx-access-log"
  6. path => "/var/log/nginx/access.log"
  7. codec => "json"
  8. }
  9. }
  10.  
  11. filter {
  12.  
  13. }
  14. output {
  15. redis {
  16. data_type => "list"
  17. key => "nginx-access-log"
  18. host => "192.168.100.20"
  19. port => "6379"
  20. db => "1"
  21. }
  22.  
  23. }
  24.  
  25. #logstash indexer端文件,从redis里面读取数据然后在es中
  26.  
  27. vim /usr/local/logstash/logstash_indexer.conf
  28.  
  29. input{
  30. redis{
  31. data_type => "list"
  32. key => "nginx-access-log"
  33. host => "redis-ip"
  34. port => "6379"
  35. db => "1"
  36. }
  37. }
  38.  
  39. output {
  40.  
  41. elasticsearch {
  42. host => "192.168.100.10"
  43. protocol => "http"
  44. index => "logstash-nginx-access-log-%{+YYYY.MM.dd}"
  45. }
  46. }

确定没有问题后,重新启动logstash

  1. /usr/local/logstash/bin/logstash -f /usr/local/logstash/bin/logstash-agent.conf
  2. /usr/local/logstash/bin/logstash -f /usr/local/logstash/bin/logstash_indexer.conf

我们可以访问http://192.168.100.10:9200/_plugin/head/,如果配置无误可以看到nginx-access-log这个索引,说明logstash已经将日志发送到es端了.

然后在kibana里面创建你的索引即可.

这样就可以收集到日志了。

elasticsearch的插件应用:

http://www.cnblogs.com/xing901022/p/5962722.html

使用Kibana 分析Nginx 日志并在 Dashboard上展示

http://www.cnblogs.com/hanyifeng/p/5860731.html

参考文档:

    kibana画图参考文档:

          http://blog.csdn.net/ming_311/article/details/50619859

          http://www.cnblogs.com/hanyifeng/p/5857875.html
          http://blog.oldboyedu.com/elk/
          http://www.cnblogs.com/galengao/p/5780588.html
          http://blog.csdn.net/wanglipo/article/details/50739820
          http://www.jianshu.com/p/66e03eb6d95a
          http://www.cnblogs.com/skyblue/p/5504595.html

Kibana反向代理配置:

1.Nginx安装(略):

2.Nginx配置 (kibana_proxy.conf)

  1. #The default server
  2.  
  3. upstream kibana_proxy {
  4. server kibana-ip-address:5601;
  5.  
  6. }
  7.  
  8. server {
  9. listen 80;
  10. server_name elk.xxx.com;
  11.  
  12. location / {
  13. index index.html index.htm;
  14. auth_basic "welcome to kibana";
  15. auth_basic_user_file /etc/nginx/passwd.db;
  16. proxy_pass http://kibana_proxy;
  17. }
  18. location /status {
  19. stub_status on;
  20. access_log /var/log/nginx/kibana_status.log;
  21. auth_basic "NginxStatus";
  22.  
  23. }
  24.  
  25. }
  26.  
  27. #生成认证登录的用户名和密码:
  28.  
  29. [root@elk-node conf.d]# htpasswd -c /etc/nginx/passwd.db admin
  30. New password:
  31. Re-type new password:
  32. Adding password for user admin
  33.  
  34. # chmod 400 /etc/nginx/passwd.db //修改网站认证数据库权限
  35. # chown nginx. /etc/nginx/passwd.db //修改网站认证数据库属主和属组
  36. # cat /etc/nginx/passwd.db //可以看到通过htpasswd生成的密码为加密格式
  37. admin:8eZAz7BqcrXmY

  

ELK+Redis 解析Nginx日志的更多相关文章

  1. ELK+redis搭建nginx日志分析平台

    ELK+redis搭建nginx日志分析平台发表于 2015-08-19   |   分类于 Linux/Unix   |  ELK简介ELKStack即Elasticsearch + Logstas ...

  2. 使用elk+redis搭建nginx日志分析平台

    elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态 ...

  3. ELK Stack (2) —— ELK + Redis收集Nginx日志

    ELK Stack (2) -- ELK + Redis收集Nginx日志 摘要 使用Elasticsearch.Logstash.Kibana与Redis(作为缓冲区)对Nginx日志进行收集 版本 ...

  4. 使用elk+redis搭建nginx日志分析平台(引)

    http://www.cnblogs.com/yjf512/p/4199105.html elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎 ...

  5. 使用elk+redis搭建nginx日志分析平台(转)

    logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录.其次,需要有个队列,re ...

  6. elk实战分析nginx日志文档

    elk实战分析nginx日志文档 架构: kibana <--- es-cluster <--- logstash <--- filebeat 环境准备:192.168.3.1 no ...

  7. elk平台分析nginx日志的基本搭建

    一.elk套件介绍 ELK 由 ElasticSearch . Logstash 和 Kiabana 三个开源工具组成.官方网站: https://www.elastic.co/products El ...

  8. Logstash使用grok插件解析Nginx日志

    grok表达式的打印复制格式的完整语法是下面这样的: %{PATTERN_NAME:capture_name:data_type}data_type 目前只支持两个值:int 和 float. 在线g ...

  9. [日志分析]Graylog2进阶 通过正则解析Nginx日志

    之前分享的 [日志分析]Graylog2采集Nginx日志 主动方式 这篇文章介绍了Graylog如何通过Graylog Collector Sidecar来采集nginx日志. 由于日志是未经处理的 ...

随机推荐

  1. 【Socket】linux套接字技术之tcp

      1.mystery引入      1)UDP也可以编写出C/S程序 ,另外TCP也可以编写点对点通信.    2)网络的本质就是资源共享,当前流行的P2P应用正好暗合了这种精神.    3)当前流 ...

  2. linux下查看最后登陆的用户的信息

    [root@oracle ~]# last -aroot pts/1 Wed Apr 1 10:35 still logged in 10.3.12.1输入命令last -a 把从何处登入系统的主机名 ...

  3. Leetcode:Interleaving String 解题报告

    Interleaving StringGiven s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2. For ...

  4. jetty debug 启动 jettyconfig配置文件

    jetty 代码启动 debug很简单  run----->>>debug as  代码启动配置文件 start 方法 @Test public void serverStrart( ...

  5. Python通过ssh连接服务器并执行命令

    [本文出自天外归云的博客园] 脚本示例如下: # coding:utf-8 import time,paramiko,re,StringIO def exec_shell(command): ''' ...

  6. s3c2440——按键中断

    s3c2440的异常向量表: IRQ中断地址是0x18.所以,根据之前的异常处理方式,我们编写启动文件: 为什么需要lr减4,可以参考这篇文章:http://blog.csdn.net/zzsfqiu ...

  7. How To Set Up SSH Keys

    How To Set Up SSH Keys.https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2

  8. eclipse中git更新操作

    1,本地已经修改的代码不要commit和push 2,选中工程,右击Team,然后点击Fetch from Upstream,从远程服务器拉取最新的代码 3,上一步操作完成,再右击工程,选中Team, ...

  9. 插入中国所有省和市的SQL语句--以后用

    需要做根据省市过滤查询的,不得已写入数据库,这个留着方便以后用. 首先创建两张表 drop database if exists BSM; create database BSM; use BSM; ...

  10. [转]oracle制定定时任务(dbms_jobs)

    原文地址:http://www.cnblogs.com/siashan/p/4183868.html 本节摘要:本节介绍使用oracle自带的job来实现oracle定制定时执行任务.   1.引言 ...