• ELK搭建指南(linux及Windows)


    当前公司系统使用mongodb记录日志,最近想对日志做可视化分析,尝试了exceptionless,感觉扩展性不高,所以尝试搭建elk,过程如下:

    ELK核心由三部分组成:

    Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

    Logstash是一个完全开源的工具,它可以对你的日志进行收集、格式化处理,最后输出到指定存储。

    kibana 是一个开源和免费的前端框架,它可以为ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

    搭建过程:

    Linux下:

      Linux下使用Docker镜像搭建,简单方便,本文默认Docker已经安装好。

      从DockerHub拉取Elasticsearch镜像:docker pull elasticsearch.

      从DockerHub拉取Logstash镜像:docker pull logstash

      从DockerHub拉取kibana镜像:docker pull kibana

      输入命令查看拉取的镜像:Docker Images(如果失败切换到管理员账户 sudo su)

      创建elk文件夹:mkdir elk

      进入elk文件夹:cd elk

      首先启动Elasticsearch服务:

      创建Elasticsearch数据存放文件夹:mkdir esdata

      docker run -d --name elasticsearch -v "$PWD/esdata":/usr/share/elasticsearch/data -p 9200:9200   elasticsearch:latest

      -d 守护进程模式,使服务在后台运行

      --name 设置docker 启动的容器名称

      -v 外挂数据卷,用来存储Elasticsearch相关数据,方式容器删除时数据丢失,冒号前为宿主机路径,冒号后为容器路径

      $PWD:获取当前完整路径

      -p 9200:9200 端口映射,将宿主机9200端口映射到容器9200端口,冒号前为宿主机端口,冒号后为容器端口(Elasticsearch默认使用9200端口)

      elasticsearch:latest 容器启动使用的镜像名称(上面拉取的镜像)

      启动后浏览器访问宿主机ip:9200,看到下图说明启动成功:

      

      启动logstash服务:

      logstash支持从文件、tcp、http、消息队列、redis等数据源输入日志数据,本文使用http方式输入。

      在elk文件夹下创建配置文件logstash.conf,配置如下:

      

    input {  
    	http{
        host => "0.0.0.0" //所有地址都可以输入
        port => 5044    //输入端口5044
        additional_codecs => {"application/json"=>"json"} //json格式
        codec => "plain"   //编解码规则 
        threads => 4        //同时开启线程
        ssl => false
    	}	
    }	  
      
    filter {   
    	json {
            source => "message"
        }	
    }  
      
    output {
    elasticsearch {  
    	hosts => ["<elasticsearchIp>:9200"] 
    	index =>"logstash-%{+YYYY.MM.dd}"
    		}
    }

      上面配置logstash会监听5044端口,将发送来的日志处理后写入elasticsearch

      使用创建的配置文件启动logstash: 

      docker run -d --name logstash -p 5044:5044 -v "$PWD":/config-dir logstash:latest -f /config-dir/logstash.conf

      启动kibana服务:

      docker run -d --name kibana -e ELASTICSEARCH_URL=http://<elasticsearchIp>:9200 -p 5601:5601 kibana:latest

      查看启动容器:docker ps

      看到下图说明三个组件全部启动成功

      

      post日志到<宿主机Ip>:5044/(使用fiddler或者其他工具或者自己写代码)

      使用浏览器访问kibana:<宿主机Ip>:5601

      使用默认的logstash-*的索引名称,并且是基于时间戳的,点击“Create”即可

       显示如下界面说明索引创建成功:

      点击左侧面板的“Discover”选项就可以看到刚刚写入的内容

      Linux下搭建完成,Kibana使用及自定义图表创建可查看官方文档:https://www.elastic.co/guide/en/kibana/current/index.html

    Windows下:

      首先安装Java的sdk,并配置环境变量,如不清楚请自行百度。

      下载三个组件并解压,地址:https://www.elastic.co/products/elasticsearch

      cmd进入elasticsearch的bin目录,运行elasticsearch.bat

      浏览器访问http://localhost:9200/,访问正常说明启动成功

      在logstash文件夹的bin目录里新建logstash.conf配置文件,配置如下:

      

    input { 
      http{
        host => "0.0.0.0"
        port => 5044
        additional_codecs => {"application/json"=>"json"}
        codec => "plain"
        threads => 4
        ssl => false
        } 
    } 
    
    output { 
      elasticsearch { 
        hosts => ["localhost:9200"] 
    	index =>"logstash-%{+YYYY.MM.dd}"
    	    }
    	}

      cmd进入logstash的bin目录,运行logstash -f logstash.conf

      cmd进入logstash的conf目录,编辑kibana.yml如下

       cmd进入kibana的bin目录,运行kibana.bat

      windows下搭建完成,浏览器访问http://localhost:5601/,显示同linux下结果一样,则说明搭建成功,可向http://localhost:5044发送日志,在kibana界面可以显示(生产环境可将三个组件安装为系统服务)。  

      根据官方文档,logstash接收队列较小,如日志写入并发量大,可在logstash前搭建一层消息队列或者redis,以解决并发问题。

    更新:

      elk在分析日志方面确实好用,但是经研究发现公司生产环境 延迟严重,分析后发现http传输效率不高,造成日志在应用端堆积,所以针对性的进行了优化:

      将logstash的input方式由http改为tcp方式,使用socket短时间长连接方式发送日志,经测试可以达到20000+每秒的发送速度。

      ps: tcp输入日志格式如果采用json格式,需要在每条日志后面添加换行符,不然会出现接收不到的情况。

            这是由于logstash的tcp插件如果编码插件配置为json,会使用json_lines编码插件,没有换行符就会被认为没有结束,所以不会处理。

  • 相关阅读:
    centos7安装docker
    spring成神之路第四十三篇:spring 中编程式事务怎么用的?
    spring成神之路第四十二篇:玩转 JdbcTemplate
    spring成神之路第四十一篇:@EnableCaching 集成 redis 缓存
    spring成神之路第四十篇:缓存使用(@EnableCaching、@Cacheable、@CachePut、@CacheEvict、@Caching、@CacheConfig)
    spring成神之路第三十八篇:@Scheduled & @EnableScheduling 定时器详解
    spring成神之路第三十七篇:@EnableAsync & @Async 实现方法异步调用
    spring成神之路第三十六篇:@EnableAspectJAutoProxy、@Aspect 中通知顺序详解
    spring成神之路第三十五篇:@Aspect 中 5 中通知详解
    spring成神之路第三十四篇:@Aspect 中@Pointcut 12 种用法
  • 原文地址:https://www.cnblogs.com/iamsach/p/7428285.html
Copyright © 2020-2023  润新知