ELK:Nginx日志记录

目的

  • 目的:需要统计推广带来的转化效果
  • 思路:通过统计 Nginx 日志,来分析不同渠道带来的访问量的变化。(可能再通过新增用户比去计算下转化率,不确定是不是需要这个值)

技术方案

  • 修改 Nginx 日志格式为JSON ,通过 Qbus 收集 Nginx 的访问日志到消息队列。再使用 Logstash 同步到 ES 中;接着创建 Kibana 索引查询模板,筛选展示数据
    • Qbus
    • Elasticsearch
    • Kibana
    • Logstash
    • Nginx 日志
阅读全文

Docker 使用gosu切换用户

容器启动时切换用户gosu执行脚本

问题

想在小组内部推一下代码检查工具Sonar,申请了容器空间用于部署。在自己本地编译镜像之后推送到公司镜像源之后,发现拉取后启动容器失败了:检查输出日志

1
2
3
4
5
java.lang.RuntimeException: don't run elasticsearch as root.
at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:94)
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:160)
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:286)
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:35)

这就奇怪了,本地构建的镜像,运行都是正常的啊;难道公司容器服务启动的时候会强制以root账户运行?

排查

本地构建镜像的时候修改 ENDPOINT 脚本 run.sh ;输出当前执行用户 whoami ;确实是 root

尝试1

1
2
3
4
# 前置切换用户
USER sonarqube
ENDPOINT ["run.sh"]
# 推送,部署还是报错 ES 无法使用 root 账户启动

尝试2

1
2
3
4
5
# 修改ENDPOINT

ENDPOINT su - sonarqube -s "./run.sh"
# 推送 部署还是错误: 环境变量,账户目录/home/sonarqube(本来就没创建账户目录)都找不到了

尝试3【√】

1
2
3
4
5
6
7
8
# 修改镜像 添加 gosu / su-exec (sonarqube 官方脚本有这个)
RUN apt update && apt install gosu -y

# 同时修改 run.sh 脚本
exec gosu sonarqube "$cmd"

# 推送&启动,OK

Go:Web接口实时限流

Golang 接口实时限流功能

实现需求

对于同一IP,同一APP包名的请求,每小时只允许100次

方案逻辑

1.自定义限流中间件,对需要限流的接口做监听

2.使用指定参数生成唯一Key,记录请求频率

3.若请求时间超过key的有效时间则重新计数(!是否触发惩罚操作,更新有效时间为2小时)

4.复杂逻辑-结合业务数据限流-指定设备ID|指定…

代码

阅读全文

TensorFlow:鸢尾花品种分析demo

运行效果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@433ad0b9b2e7:/usr/src/app# python train2.py 
Loss test: 1.3583741188049316
Step: 0, Initial Loss: 1.3583741188049316
Step: 1, Loss: 1.2449184656143188
Epoch 000: Loss: 1.061, Accuracy: 46.667%
Epoch 050: Loss: 0.418, Accuracy: 82.500%
Epoch 100: Loss: 0.307, Accuracy: 94.167%
Epoch 150: Loss: 0.221, Accuracy: 97.500%
Epoch 200: Loss: 0.162, Accuracy: 96.667%
Test set accuracy: 96.667%
root@433ad0b9b2e7:/usr/src/app#
root@433ad0b9b2e7:/usr/src/app# python train2_test.py
Example 0 prediction: Iris setosa (98.3%)
Example 1 prediction: Iris versicolor (82.5%)
Example 2 prediction: Iris virginica (75.2%)
root@433ad0b9b2e7:/usr/src/app#

运行环境

实现步骤

阅读全文

Go:Web服务日志记录

GoWeb 服务日志管理

前情

最新使用 Go 语言开发了一个滑动验证码 SDK 的服务端,提供的接口都具备基础功能了,但是业务逻辑日志以及请求日志没有一个好的记录方式,而且使用的容器服务,每次发布都会刷新容器,文件类的日志都会丢失。因此查了一下常见的Go Log 处理方式。发现 logrus 包使用的人不少,感觉也很好使用毕竟带 hook (带钩子的都是工具人…)

目的

  • 记录所有请求日志
  • 记录业务逻辑关键信息
  • 方便查询检索分析

实现细节

  1. 自定义日志服务中间件,
  2. 使用 ES 存储日志数据
  3. 过滤接口检查的调用日志
  4. ES使用时间索引
  5. handler路由使用中间件拦截记录请求日志Mux.Use(m-)
  6. 逻辑日志纪录使用全局Loges 对象

Go项目-使用ES

自定义日志收集中间件

logrus “github.com/sirupsen/logrus”

阅读全文