运维体系~日志监控ELKB

日志监控体系的必要性
1:我们知道一微服务项目,
小型的也有上10个节点,每个节点至少2个server, 
多几十个server, 当我们在微服务项目中查看日志的时候,
你就不知道到日志分布在哪一台具体server上面。
2:日志有很多,中间件日志 tomcat、nginx、应用程序本身,
我们就需要统一日志管理工具,对收集的日志进行汇总、分组、索引
统一进行分析和查看。

一、 日志监控体系的架构

监控体系建构图
架构演进
Elk
Elk端口详情说明

参考 centos手工安装:ELK详细安装部署

二、相关中间件安装

elk套件中,牵扯的组件比较多,不光有Elk三个组件,还有其他组件,
还要配置三个组件之间相互通信,配置还是有点麻烦,
我们选用GitHub 通用的 docker compose实现一键进行配置。
当然,这个配置也使用与 rancher , 使用rancher的时候 把 相对路径,改成绝对路径即可。

2.1 组件和端口说明

组件作用端口类似产品
Elasticsearch负责存储数据,适合全文检索; 所有安装配置看官网,特别全乎。elastci download 9200: Elasticsearch HTTP 、9300: Elasticsearch TCP transport(集群通讯保持心跳,一般用不到)
Logstash采集、转换、充实,然后输出,需要在每台主机上面安装5000: Logstash TCP input(收集日志端口) 、5044Filebeat
Kibana负责数据的可视化,类似promethues中的grafana5601: Kibanagrafana
Filebeat轻量级数据收集引擎,轻量级别的Logstash; ELK Stack 在 Agent 的第一选择 ;以轻量化方式收集、解析和传输数据;Beats有很多子产品,Filebeat是其中的一种Logstash

版本号,Elk 套件的版本好,要保持一致,不让回出问题。我们选取6.8.0 ,7.x 最新的资料少,springboot也需要对应升级的。6.8.0版本不老,不新,docker pull速度也快。 下载最新的6.8.x速度有时候还是非常慢的。

2.2 docker compose实现一键安装Elk

约定的配置文件放置位置:/usr/local/docker_volume/elk,我们把 github clone到本地
docker compose安装配置文件 docker-elk compose
国内同步地址-docker-elk compose,改地址无法直接用于rancher,但可以参考

由于上面的docker-compose使用的是V3版本,rancher不支持,我们使用:dangerfarms/elk-rancher- 组合安装
ELK-on-rancher 单个安装

  1. 宿主机准备数据,如果elasticsearch报错max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144],我们使用命令在宿主机查看:sysctl -a|grep vm.max_map_count, 要修改:
#在/etc/sysctl.conf文件最后添加一行:
vm.max_map_count=262144
#保存之后,让立即生效, 在宿主机执行:
/sbin/sysctl -p
# 宿主机上面查看一下
sysctl -a|grep vm.max_map_count
  1. 映射宿主机的目录进行授权 chmod +677 /usr/local2/docker_volume/elk/elasticsearch/
  2. 启动完成之后访问:curl http://localhost:9200curl http://localhost:5601/app/kibana

2.3 架构优化,加入 kafaka

kafka-docker

2.4 项目logstash 收集日志配置

2.4.1 收集spring项目日志

 spring项目默认日志输出到控制台`console`,
 我们输出日志的地方同时输出一份到**logstash**的5000端口。
 这样就实现了,logstach对spring应用日志的收集。
 当然也可以,把 日志映射到指定目录,我们去抓取

使用docker配置映射路径,/usr/local2/docker_volume/elk/logstash/pipeline:/usr/share/logstash/pipeline ,这里是文件夹里面可以是多种日志。

  1. QA: 这里我们定义了多个input,发现输出内容是错乱的
  2. Reason: 究其原因,是因为 logstash 运行起来的时候,会将所有的配置文件合并执行。因此,每个 input 的数据都必须有一个唯一的标识,在 filter 和 output 时,通过这个唯一标识来实现过滤或者存储到不同的索引。
  3. Result: 参考:【ELK - logstash 多个配置文件及模板的使用】
##pipline/logstash.conf
## eg: spring系统日志,需要需改日志文件,日志文件输出的时候输出一份到 logstash的5000端口,logstach在推送给 es.
input {
  tcp {
    port => 5000
    type => syslog
  }
  udp {
    port => 5000
    type => syslog
  }
}
## Add your filters / logstash plugins configuration here 也可也不要直接空着。 这对抓取的数据进行格式化处理,变成 可以方便识别的n个字段。
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}" ]
    }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}

output {
  if [type] ==  "syslog" {
      elasticsearch {
        hosts => ["elasticsearch:9200"]
        user => "elastic"
        password => "changeme"
      }
      # 将日志输出到当前的终端上显示
      stdout { codec => rubydebug }
  }
}

这里的日志收集配置文件可以是多个,如:pipline/logstash-xxx.conf
logstash configuration
multiple-pipelines

2.4.2 收集nginx日志

##pipline/logstash-nginx.conf
input {
  file {
    type =>"nginx-log"
    path => ["/var/log/nginx/access.log", "/usr/local/nginx/logs/access.log"]
    start_position => "beginning"
    sincedb_path => "/dev/null"
  }
}
## Add your filters / logstash plugins configuration here 也可也不要直接空着。最好进行格式化,方便查看。 hosts可以是主机ip或者域名,也可以是docker link的容器名称。
output {
  if [type] ==  "nginx-log" {
    elasticsearch {
      hosts => ["elasticsearch:9200"]
      index => "nginx-log-%{+YYYY.MM}"
    }
    # 将日志输出到当前的终端上显示
    stdout { codec => rubydebug }
  }
}

logstash的nginx日志
kibana  添加索引 匹配
在这里插入图片描述

查看自己要看的日志信息

2.4.3 收集日志进行格式化

参考:Logstash使用grok过滤nginx日志(二)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dazer007

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值