ELK梳理

就单纯从ELK上来讨论,其实是三个组件的缩写,即:ElasticSearch、Logstash、Kibana,当然结合实际业务,也可以把ELK发展到ELKF,也就是多了一个Filebeat;这里的Filebeat只是众多beat中较为出名、用的最多的一个,还有很多beat可以实现不同文件、类型的日志采集。

Elasticsearch

分布式搜索和分析引擎。具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。

Logstash

日志收集器。搜集各种数据源,并对数据进行过滤、分析、格式化等操作,然后存储到 Elasticsearch。

Kibana

数据分析和可视化平台。与 Elasticsearch 配合使用,对其中数据进行搜索、分析、图表展示。

Filebeat

一个轻量级开源日志文件数据搜集器,Filebeat 读取文件内容,发送到 Logstash 进行解析后进入 Elasticsearch,或直接发送到 Elasticsearch 进行集中式存储和分析

架构介绍

基于ELK的使用方式,Logstash 作为日志搜集器,Elasticsearch 进行日志存储,Kibana作为日志呈现,大致以下几种架构。

  • 架构一 

架构二

架构三 

架构四 

Beats 集合了多种单一用途数据采集器,每款采集器都是以用于转发数据的通用库 libbeat 为基石,beat 所占的系统CPU和内存几乎可以忽略不计,libbeat平台还提供了检测机制,当下游服务器负载高或网络拥堵时,会自动降低发生速率。下面的例子我们使用 Filebeat 来对文件日志的收集,其他的 beat 可以忽略。

 

架构四相比于架构二,如果将每台服务器上部署的 Logstash 都换成对应的 Beats ,那就是更理想的架构了。

不管怎么样,对于日志解析和过滤的 Logstash 资源消耗还是比较高的,所以如果需要,可以将 Logstash 的部署使用分布式,Elasticsearch 的部署使用集群来强化整个日志系统。

 

 

转载于:  https://mp.weixin.qq.com/s?subscene=23&__biz=MzU3MTUxOTIwMw==&mid=2247484837&idx=1&sn=7f0de3eeea3fc6ee299587704f5c44cd&chksm=fcdfbc29cba8353fd894582da7ae2c93b5920c4dbb1e197b011a817dc0962e317842a32d5560&scene=7&key=5ea26212a5cd15891be4fdf15216ffd079717165e9e3e989d51726b6571985c13168df15537822de411fa02ce25171be33150a939901564fd28512cd14f35a47b112e58be9d0c2b7c5164cb1b9f9ed7f7bf158e1e77a7bd55bd18035a4d50c3c32d5dfa297605b97547fdbed906d79c7a93ff3b4e28c67ac463e57fcde47f4aa&ascene=0&uin=MTA5MTc2NDg4NA%3D%3D&devicetype=Windows+7+x64&version=63000011&lang=zh_CN&exportkey=AQGVUGZhVEp0YYnsAmcs5Bk%3D&pass_ticket=irzP86a7YzJp5K5TuVkPByd4VOsDelQvRJDy7sf7KGB1Zr6oEDkh9iS%2FC%2FSukwev&wx_header=0&fontgear=2

 

收集日志的agent采用轻量的filebeat,并且中间使用redis进行数据写入的缓冲,整体架构如下图

主机规划:

  • 192.168.2.141 :部署应用 nginx, filebeat

  • 192.168.2.142 :部署redis

  • 192.168.2.143 :部署logstash

  • 192.168.2.144 :部署elasticsearch

  • 192.168.2.145 :部署kibana

部署nginx与filebeat

  • 安装nginx

  1. [root@nginx-filebeat ~]# yum install nginx -y

  • 安装filebeat

  1. [root@nginx-filebeat sowft]# yum install filebeat-5.6.10-x86_64.rpm -y

  • 查看filebeat安装后的相关路径

  1. [root@nginx-filebeat sowft]# rpm -ql filebeat

  • 配置filebeat,将日志输出到redis

/etc/filebeat/filebeat.full.yml文件中有对redis配置的内容,将里面的对应内容复制添加到 /etc/filebeat/filebeat.yml中,如下配置

  1. #------------------------------- Redis output ----------------------------------

  2. output.redis:

  3. # Boolean flag to enable or disable the output module.

  4. enabled: true

  5.  

  6. # The list of Redis servers to connect to. If load balancing is enabled, the

  7. # events are distributed to the servers in the list. If one server becomes

  8. # unreachable, the events are distributed to the reachable servers only.

  9. hosts: ["192.168.2.142:6379"]

  10.  

  11. # The Redis port to use if hosts does not contain a port number. The default

  12. # is 6379.

  13. port: 6379

  14.  

  15. # The name of the Redis list or channel the events are published to. The

  16. # default is filebeat.

  17. key: filebeat

  18.  

  19. # The password to authenticate with. The default is no authentication.

  20. #password:

  21.  

  22. # The Redis database number where the events are published. The default is 0.

  23. db: 0

  24.  

  25. # The Redis data type to use for publishing events. If the data type is list,

  26. # the Redis RPUSH command is used. If the data type is channel, the Redis

  27. # PUBLISH command is used. The default value is list.

  28. datatype: list

部署redis

  1. [root@redis-server ~]# yum install reids -y

  • 修改监听端口,其他设置可以暂不修改

  1. bind 0.0.0.0

安装logstash

  • 安装jdk

  1. yum install java-1.8.0-openjdk-devel.x86_64 -y

  • 安装logstash

  1. [root@logstash logstash]# yum localinstall logstash-5.6.10.rpm -y

  • 将logstash指令加入环境变量

  1. [root@logstash ~]# vim /etc/profile.d/logstash.s

  2. export PATH=/usr/share/logstash/bin:$PATH

 

  1. [root@logstash ~]# source /etc/profile.d/logstash.sh

  • 修改vim /etc/logstash/jvm.options文件

  1. -Xms1g

  2. -Xmx1g

  3. #两个值保持一样,如果不一样logstash无法传输文档到ESserver

  • 测试logstash正确性

       [root@logstash ~]# cd /etc/logstash/conf.d

       [root@logstash conf.d]# vim test.conf

input 
{

        stdin{}

}

output 
{

        stdout{}

}
  • 执行测试指令

  1. [root@logstash conf.d]# logstash -f ./test.conf -t

  2. Configuration OK

logstash上的配置文件暂时可以不配置,等部署完elasticsearch后在配置logstash的过滤规则,这里只做正确性测试即可

部署elasticsearch

  • 安装jdk

  1. [root@elastic ~]# yum install java-1.8.0-openjdk-devel.x86_64 -y

  • 安装elasticsearch

  1. [root@elastic opt]# yum install elasticsearch-5.6.10.rpm -y

  • 修改配置

  1. [root@elastic ~]# vim /etc/elasticsearch/elasticsearch.yml

  2. cluster.name: my-application

  3. node.name: node-1

  4. path.data: /elk/data

  5. path.logs: /elk/logs

  6. network.host: 192.168.2.144

  7. http.port: 9200

  • 创建日志和数据目录

  1. [root@elastic ~]# mkdir -p /elk/{data,logs}

  • 将目录属主改为elasticsearch用户

  1. [root@elastic ~]# chown -R elasticsearch.elasticsearch /elk/

  • 启动服务

  1. [root@elastic ~]# systemctl start elasticsearch

在nginx应创建测试数据访问

  • 创建测试页面

  1. [root@nginx-filebeat html]# for i in {1..150};do echo test$i > test$i.html;done

  • 模拟不同地址访问生成日志

  1. [root@nginx-filebeat ~]# 

          

while true;

do

ip=$[$RANDOM%223+1];

curl --header "X-Forwarded-For: $ip.33.22.100" http://192.168.2.141/test$ip.html;

sleep 2;

done

以上的配置可以自动测试访问nginx,并生成不同的ip地址段

配置logstash过滤规则

  1. input {

  2.  

  3. # file {

  4. #

  5. # start_position => "end"

  6. # path => ["/var/log/nginx/access.log"]

  7. #

  8. # }

  9. # 以上file段配置是针对logstash作为agent端收集日志的场景使用,从本地文件输入

  10.  

  11. redis {

  12. host => "192.168.2.142"

  13. port => "6379"

  14. key => "filebeat" #这里的key要与filebeat.yml中定义的key相同

  15. data_type => "list"

  16. # threads => "5"

  17. db => "0"

  18. }

  19.  

  20. }

  21.  

  22. filter {

  23. grok {

  24. match => { "message" => "%{HTTPD_COMBINEDLOG} \"%{DATA:realclient}\"" }

  25. remove_field => "message"

  26.  

  27. }

  28. # \"%{DATA:realclient}\" 可以记录nginx的真实客户端地址

  29.  

  30. date {

  31. match => [ "timestamp","dd/MMM/YYYY:H:m:s Z" ]

  32. remove_field => "timestamp"

  33. }

  34.  

  35.  

  36. }

  37.  

  38. output {

  39. # elasticsearch { #输出到elasticsearch服务器,先输出到本地终端查看,没有问题后输出到elasticsearch

  40. # hosts => "192.168.2.144:9200"

  41. # index => "logstash-%{+YYYY.MM.dd}"

  42. # document_type => "nginx_logs"

  43. # }

  44.  

  45. stdout { #输出到屏幕测试

  46. codec => rubydebug

  47. }

  48. }

  • 以上的logstash的日志输出格式如下:

  1. {

  2. "request" => "/test1.html",

  3. "agent" => "\"curl/7.29.0\"",

  4. "offset" => 11699,

  5. "auth" => "-",

  6. "ident" => "-",

  7. "input_type" => "log",

  8. "verb" => "GET",

  9. "source" => "/var/log/nginx/access.log",

  10. "type" => "log",

  11. "referrer" => "\"-\"",

  12. "@timestamp" => 2018-09-27T08:35:35.000Z,

  13. "realclient" => "1.33.22.100",

  14. "response" => "200",

  15. "bytes" => "6",

  16. "clientip" => "192.168.2.141",

  17. "beat" => {

  18. "name" => "nginx-filebeat",

  19. "hostname" => "nginx-filebeat",

  20. "version" => "5.6.10"

  21. },

  22. "@version" => "1",

  23. "httpversion" => "1.1"

  24. }

  • 把配置文件中的配置output输出对象改为输出到elasticsearch

  1. output {

  2. elasticsearch {

  3. hosts => "192.168.2.144:9200"

  4. index => "logstash-%{+YYYY.MM.dd}"

  5. document_type => "nginx_logs"

  6. }

  7.  

  8. # stdout { #输出到屏幕测试

  9. # codec => rubydebug

  10. # }

  11. }

注意:/etc/logstash/conf.d/ 目录下的所有文件都会被加载,不仅仅是以.conf结尾的文件,所以正常情况下该目录只存在一个确定使用的配置文件,其他文件都不要放在这

  • 启动logstash服务

  1. systemctl start logstash

  • 查看elasticsearch服务生成的数据文件,实时访问服务,看看数据文件大小是否变化

  1. [root@logstash ~]# curl -XGET 192.168.2.144:9200/_cat/indices

  2. yellow open logstash-2018.09.27 vOhS-Hq7RG-oAYTUJng91Q 5 1 93 0 560.7kb 560.7kb

  3.  

  4. [root@logstash ~]# curl -XGET 192.168.2.144:9200/_cat/indices

  5. yellow open logstash-2018.09.27 vOhS-Hq7RG-oAYTUJng91Q 5 1 106 0 651.2kb 651.2kb

  6.  

  7. #最开头以yellow开头说明配置项有点小问题。

  8. #这个地方以红黄蓝颜色标记数据传输状态。

  9. #黄色是缺失索引文件副本,ESserver是以集群的方式工作的,但这里是单节点

部署配置kibana

  1. [root@kibana opt]# yum localinstall kibana-5.6.1-x86_64.rpm -y

  • 配置

  1. server.port: 5601

  2. server.host: "0.0.0.0"

  3. server.name: "kibana"

  4. elasticsearch.url: "http://192.168.2.144:9200"

  • 启动

  1. [root@kibana ~]# systemctl start kibana

登录Kibana只需在浏览器数据kibana服务器地址+5601端口即可,经过访问测试,以上配置登录kibana调取日志访问成功

 

配置用户的ip归属地

ip地址的归属地查询需要使用互联网上的地图的解析库,地图的解析库会定期地更新,下载到服务器本地,解压,在logstash的配置文件中指定解压后的 .mmdb后缀的文件路径

地图解析库下载地址:https://dev.maxmind.com/geoip/geoip2/geolite2/

  • logstash的配置文件添加 geoip段,最终配置段如下:

  •  

     

     

     

posted @ 2020-09-17 16:10  chengxuyonghu  阅读(171)  评论(0编辑  收藏  举报