Category - IT技术

AWS ELB WebSocket TCP    2017-07-19 20:14:21    974

AWS Elastic Load Balancing 与WebSocket并用报错

案情描述:
中午过后,同事发现含有WebSocket的页面与后端的连接死掉了,红色的鲜血流满了屏幕,详情看图
title

Incompatibile SockJS! Main site uses: "1.1.1", the iframe: "1.0.0".

案情分析:

在ELB中,我们使用的是http协议,但是ELB却不支持WebSocket协议(仅支持HTTP, HTTPs, TCP and TCPs.)并且没有任何消息表示ELB支持的HTTP和HTTPS协议可以支持WebSocket。当浏览器端向服务端发送消息的时候,由于ELB拦截掉了请求,又判断出协议不是支持的几种,就残忍的抛弃掉了。

药方:
从根本出发,WebSocket是基于HTTP协议的,而HTTP协议又是基于TCP协议的,恰巧ELB支持TCP协议,那么可以将ELB配置中HTTP协议改为TCP协议即可,如图
title

参考文章:http://blog.flux7.com/web-apps-websockets-with-aws-elastic-load-balancing


by 刘迎光@萤火虫工作室
OpenBI交流群:495266201
MicroService 微服务交流群:217722918
mail: liuyg#liuyingguang.cn
博主首页(==防止爬虫==):http://blog.liuyingguang.cn

CentOS7 EFK docker elasticsearch fluent kibana 日志    2017-07-19 20:11:59    1001

Fluentd并非是专用于日志文件收集的,而是一个通用的信息收集、整理、转发的流式数据处理工具,日志收集只是它十分典型的一个运用场景。重要的是,Fluentd的日志收集功能对容器支持十分完备,远远胜于Logstash等传统日志收集工具。一方面得益于Fluentd社区开发了几种专用于Docker日志文件的收集插件,这些插件能够在Fluentd收集完Docker日志以后自动为它加上容器相关的信息,比较推荐其中的fluent-plugin-docker-metadata-filter这一款插件,它提供的信息颇为齐全。Logstash对于这方面依然比较空缺,GitHub上唯一能够找到的一款社区插件也已经在一年前就停止开发。另一方面,当前Docker官方支持的日志驱动除了默认的使用本地目录,还可以直接发送到远程的日志存储或日志采集服务,而其中日志采集服务目前仅仅支持Splunk和Fluentd,同样没有Logstash等老一辈开源日志工具的踪影。

安装elasticsearch

安装JDK或者openJDK(这里以openJDK为例)

  1. [root@elk elk]# yum install java-1.8.0-openjdk -y

安装elasticsearch

  1. [root@elk elk]# wget -c https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.3/elasticsearch-2.3.3.rpm
  2. [root@elk elk]# yum localinstall elasticsearch-2.3.3.rpm -y
  3. .....
  4. Installing : elasticsearch-2.3.3-1.noarch 1/1
  5. ### NOT starting on installation,
java logback EFK 日志    2017-07-19 19:56:24    906

此篇文章主要讲述EFK与logback的整合,主要解决docker的log_driver的日志输出的问题:
1. 首先,处理错误栈信息的时候,docker会将错误栈分解成多行,而使用此插件,则可以将错误栈完整的保存在elasticsearch的一条记录中
2. docker内部的服务可以不用写日志文件了(或者有限循环),如果服务还活着,那么日志一定会被写入到elasticsearch

打包日志插件

源码地址:logback-more-appenders

关于此插件的打包,这里不多做说明,相应jar包可以在刘迎光的nexus中找到,搜索“logback-more-appenders”即可

项目引用

pom.xml文件添加依赖

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.firewarm</groupId>
  5. <artifactId>testLogback4Fluentd</artifactId>
  6. <packaging>war</packaging>
  7. <version>0.0.1-SNAPSHOT</version>
  8. <name>testLogback4Fluentd Maven Webapp</name>
  9. <url>http://maven.apache.org</url>
  10. <dependencies>
  11. <dependency>
  12. <grou
docker java logback EFK    2017-07-19 19:53:38    1034

继续上篇文章java logback 向 EFK 写入日志
此篇文章主要讲述在docker环境下EFK与logback的整合,主要解决java项目在docker环境下,向EFK输出日志的问题:
1. 上篇文章中的方法虽然可以向EFK写入日志,但是在集群环境中,无法区分容器,除非自己在日志的msg中写入相关信息,然而往往会被分词器分开,这点比较麻烦
2. 虽然上篇文章中的logback-more-appenders可以使用DataFluentAppender方式来向elasticsearch添加额外的fields,但是这里也同时存在一个问题,就是msg中的部分信息,会被拆分成多个field,导致msg信息不再完整,以及从kibana上面查看日志非常不便

下面来一起看看我是如何解决的(部分内容跟上篇文章同)

打包日志插件(此处有不同)

源码地址:fluentd-logback-appender(此插件是我基于logback-more-appenders源码进行的改进,使得在使用FluentLogbackAppender类的时候,也可以添加额外的fields)

关于此插件的打包,这里不多做说明,相应jar包可以在刘迎光的nexus中找到,搜索“fluentd-logback-appender”即可

项目引用

pom.xml文件添加依赖

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.firewarm</g
docker consul swarm overlay    2017-07-19 19:51:10    1103

Docker的使用中,尤为重要的是服务发现和docker的宿主机集群及跨主机overlay网络的搭建,这里来介绍下常用来配合使用的swarm+consul集群的搭建(此处全基于docker容器)

集群介绍:

192.168.11.30 为consul服务的leader,swarm的集群server和client节点,并为primary

192.168.11.32 为consul服务的节点,swarm的集群server和client节点,并为备份节点

服务分布:

192.168.11.30:

consul、swarm、nginx

192.168.11.32:

consul、swarm、nexus、jenkins、registry

基础环境

修改docker基础配置

cluster-store 是consul的leader的地址

cluster-advertise 是swarm client的地址,即当前主机

11.30

  1. vi /usr/lib/systemd/system/docker.service
  2. ExecStart=/usr/bin/docker daemon --tls=false -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375 --cluster-store=consul://192.168.11.30:8500 --cluster-advertise=192.168.11.30:2375
  3. systemctl daemon-reload
  4. systemctl restart docker

by 刘迎光@萤火虫工作室
OpenBI交流群:495266201
MicroService 微服务交流群:217722918
mail: liuyg#liuyingguang.cn
博主首页(==防止爬虫==):http://blog.liuyingguang.cn
11.32

  1. vi /usr/lib/systemd/system/docker.servi
21/26