严阵以待


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

Nginx日志常用统计分析命令

发表于 2020-08-12 | 阅读次数:

Nginx日志常用统计分析命令


IP相关统计

统计IP访问量(独立ip访问数量)

awk '{print $1}' access.log | sort -n | uniq | wc -l

查看某一时间段的IP访问量(4-5点)

grep "07/Apr/2017:0[4-5]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc -l

查看访问最频繁的前100个IP

awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 100

查看访问100次以上的IP

awk '{print $1}' access.log | sort -n |uniq -c |awk '{if($1 >100) print $0}'|sort -rn

查询某个IP的详细访问情况,按访问频率排序

grep '127.0.01' access.log |awk '{print $7}'|sort |uniq -c |sort -rn |head -n 100


页面访问统计

查看访问最频的页面(TOP100)

awk '{print $7}' access.log | sort |uniq -c | sort -rn | head -n 100

查看访问最频的页面([排除php页面】(TOP100)

grep -v ".php" access.log | awk '{print $7}' | sort |uniq -c | sort -rn | head -n 100

查看页面访问次数超过100次的页面

cat access.log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less

查看最近1000条记录,访问量最高的页面

tail -1000 access.log |awk '{print $7}'|sort|uniq -c|sort -nr|less


每秒请求量统计

统计每秒的请求数,top100的时间点(精确到秒)

awk '{print $4}' access.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 100


每分钟请求量统计

统计每分钟的请求数,top100的时间点(精确到分钟)

awk '{print $4}' access.log |cut -c 14-18|sort|uniq -c|sort -nr|head -n 100


每小时请求量统计

统计每小时的请求数,top100的时间点(精确到小时)

awk '{print $4}' access.log |cut -c 14-15|sort|uniq -c|sort -nr|head -n 100


性能分析

在nginx log中最后一个字段加入$request_time 列出传输时间超过 3 秒的页面,显示前20条

cat access.log|awk '($NF > 3){print $7}'|sort -n|uniq -c|sort -nr|head -20

列出php页面请求时间超过3秒的页面,并统计其出现的次数,显示前100条

cat access.log|awk '($NF > 1 && $7~/\.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100


蜘蛛抓取统计

统计蜘蛛抓取次数

grep 'Baiduspider' access.log |wc -l

统计蜘蛛抓取404的次数

grep 'Baiduspider' access.log |grep '404' | wc -l


TCP连接统计

查看当前TCP连接数

netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l

用tcpdump嗅探80端口的访问看看谁最高

tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr


转载自Nginx日志常用统计分析命令

IDEA下生成SpringDataJPA的Java实体

发表于 2020-05-11 | 阅读次数:

IDEA下生成SpringDataJPA的Java实体


最近在研究SpringDataJPA,首先的第一步当然是需要知道怎么快速的生成对应的Java实体,Google上看到的大部分都是使用Eclipse进行生成,下面记录下IDEA的生成方式,比较简单。


IDEA操作流程

idea-jpa-generate.png

  1. Idea中选择Database,如果没有则需要自己新增一个。
  2. 连接需要生成的数据库。
  3. 写入生成的脚本信息。
  4. 直接生成。

可以按照自己的需求来对下面的脚本配置信息进行修改。


配置信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import com.intellij.database.model.DasTable
import com.intellij.database.model.ObjectKind
import com.intellij.database.util.Case
import com.intellij.database.util.DasUtil

/*
* Available context bindings:
* SELECTION Iterable<DasObject>
* PROJECT project
* FILES files helper
*/
//修改为你的实体类的包名
packageName = "com.yanzhenyidai.squid.miniprogram.entity;"
typeMapping = [
(~/(?i)int/) : "Long",
(~/(?i)float|double|decimal|real/): "Double",
(~/(?i)bool|boolean/) : "Boolean",
(~/(?i)datetime|timestamp/) : "java.util.Date",
(~/(?i)date/) : "java.sql.Date",
(~/(?i)time/) : "java.sql.Time",
(~/(?i)/) : "String"
]

FILES.chooseDirectoryAndSave("Choose directory", "Choose where to store generated files") { dir ->
SELECTION.filter { it instanceof DasTable && it.getKind() == ObjectKind.TABLE }.each { generate(it, dir) }
}

def generate(table, dir) {
def className = javaName(table.getName(), true)
def fields = calcFields(table)
new File(dir, className + ".java").withPrintWriter { out -> generate(out, table, className, fields) }
}

def generate(out, table, className, fields) {
def tableName = table.getName()
out.println "package $packageName"
out.println ""
out.println "import lombok.Data;"
out.println ""
out.println "import javax.persistence.*;"
out.println "import java.io.Serializable;"
out.println ""
out.println "@Data"
out.println "@Entity"
out.println "@Table(name = \"$tableName\")"
out.println "public class $className implements Serializable {"
out.println ""
// 判断自增
if ((tableName + "_id").equalsIgnoreCase(fields[0].colum) || "id".equalsIgnoreCase(fields[0].colum)) {
out.println "\[email protected]"
out.println "\[email protected](strategy=GenerationType.IDENTITY)"
}
fields.each() {
if (it.annos != "") out.println " ${it.annos}"
if (it.colum != it.name) {
out.println "\[email protected](name = \"${it.colum}\")"
}
out.println "\tprivate ${it.type} ${it.name};"
out.println ""
}
out.println "}"
}

def calcFields(table) {
DasUtil.getColumns(table).reduce([]) { fields, col ->
def spec = Case.LOWER.apply(col.getDataType().getSpecification())
def typeStr = typeMapping.find { p, t -> p.matcher(spec).find() }.value
fields += [[
name : javaName(col.getName(), false),
colum: col.getName(),
type : typeStr,
annos: ""]]
}
}

def javaName(str, capitalize) {
def s = str.split(/(?<=[^\p{IsLetter}])/).collect { Case.LOWER.apply(it).capitalize() }
.join("").replaceAll(/[^\p{javaJavaIdentifierPart}]/, "_").replaceAll(/_/, "")
capitalize || s.length() == 1 ? s : Case.LOWER.apply(s[0]) + s[1..-1]
}

Docker持续体验

发表于 2020-03-16 | 分类于 Docker | 阅读次数:

upload successful

Docker持续体验


第一次听说到Docker是在2016年的时候,最近因为百度云服务器到期,要将一些服务迁移到阿里云上,在安装一些中间件的时候,才体会到了Docker的强大。


安装Docker

主要记录在Linux上安装,Windows可以直接下载.msi安装程序安装。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

检查Linux内核版本,Docker要求Linux内核版本高于3.10
uname -r

更新系统yum源
yum update
... // 省略更新代码

卸载旧版本,如果有安装Docker
sudo yum remove docker docker-common docker-selinux docker-engine

安装需要的安装包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

设置Docker的yum源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

查看所有Docker仓库中的版本,选定版本进行安装
yum list docker-ce --showduplicates | sort -r

安装Docker
sudo yum install docker-ce-19.03.5 docker-ce-cli-19.03.5 containerd.io
阅读全文 »

SpringBoot,SpringCloud版本整理

发表于 2020-01-16 | 分类于 Java | 阅读次数:

SpringBoot,SpringCloud版本整理


前段时间在搭SpringCloud框架,期间有过版本冲突问题发生,以下是整理的各兼容版本


这是一篇记录贴

SpringCloud SpringBoot
Finchley.M2 Spring Boot >=2.0.0.M3 and <2.0.0.M5
Finchley.M3 Spring Boot >=2.0.0.M5 and <=2.0.0.M5
Finchley.M4 Spring Boot >=2.0.0.M6 and <=2.0.0.M6
Finchley.M5 Spring Boot >=2.0.0.M7 and <=2.0.0.M7
Finchley.M6 Spring Boot >=2.0.0.RC1 and <=2.0.0.RC1
Finchley.M7 Spring Boot >=2.0.0.RC2 and <=2.0.0.RC2
Finchley.M9 Spring Boot >=2.0.0.RELEASE and <=2.0.0.RELEASE
Finchley.RC1 Spring Boot >=2.0.1.RELEASE and <2.0.2.RELEASE
Finchley.RC2 Spring Boot >=2.0.2.RELEASE and <2.0.3.RELEASE
Finchley.SR4 Spring Boot >=2.0.3.RELEASE and <2.0.999.BUILD-SNAPSHOT
Finchley.BUILD-SNAPSHOT Spring Boot >=2.0.999.BUILD-SNAPSHOT and <2.1.0.M3
Greenwich.M1 Spring Boot >=2.1.0.M3 and <2.1.0.RELEASE
Greenwich.SR4 Spring Boot >=2.1.0.RELEASE and <2.1.12.BUILD-SNAPSHOT
Greenwich.BUILD-SNAPSHOT Spring Boot >=2.1.12.BUILD-SNAPSHOT and <2.2.0.M4
Hoxton.SR1 Spring Boot >=2.2.0.M4 and <2.2.3.BUILD-SNAPSHOT
Hoxton.BUILD-SNAPSHOT Spring Boot >=2.2.3.BUILD-SNAPSHOT

一次Zookeeper的问题

发表于 2019-09-10 | 分类于 Java | 阅读次数:

一次Zookeeper的问题


前段时间发现生产服务变得特别慢,结果发现是两台服务器其中一台服务一直提示Zookeeper连接超时,查了下Zookeeper服务,发现莫名其妙的停止了,于是开始排查问题。


首先定位Zookeeper停止时间

查询Nginx日志,得到最终日志打印时间,可以得出最后一次服务执行时间;

查看Zookeepe在这个时间段打印的日志,得到Zookeeper停止的原因;

原因是之前其中有台服务器重启过了,导致共享文件目录失效,停止的这台服务器一直访问不到共享目录,导致Zookeeper和其他NFS服务失效;

结果把共享目录重新配置后,重启了Zookeeper服务,发现过了大约10分钟,又停止了。


继续查看Zookeeper日志

查看Zookeeper节点的log日志,发现没有问题;

跟踪Zookeeper的占用内存,也没有发现问题;

尝试使用sudo 权限用户启动Zookeeper。


解决

对比了两台服务器的Zookeeper配置文件,感觉应该是配置文件配置错了,记录一下。

HashMap实现原理(JDK1.8)

发表于 2019-09-08 | 分类于 HashMap | 阅读次数:

HashMap实现原理(JDK1.8)


如果突然被同行问起HashMap的实现原理,你会不会和我一样词穷。

下面是看完HashMap源码的一些感受和心得。

HashMap是实现了Map接口,而HashMap底层实际为链表+数组,可以看到源码中的Node<K,V>[] table,Node则是Map中的Entry集合的实现。transient修饰则是不参与Java中的序列化。

阅读全文 »

GitHub持续体验

发表于 2019-09-01 | 分类于 Github | 阅读次数:

GitHub持续体验


Github创建自己的仓库(如果自己有服务器可以搭建Gitlab),也可以在git客户端上创建项目,通过remote同步到指定的git仓库上。

记录使用Github的一些流程和语法:

upload successful

阅读全文 »

MYSQL 性能调优的10个方法

发表于 2019-08-23 | 分类于 数据库 | 阅读次数:

MYSQL 性能调优的10个方法


如下内容记录于某外企DBA

MYSQL 应该是最流行了 WEB 后端数据库。WEB 开发语言近期发展非常快,PHP, Ruby, Python, Java 各有特点,尽管 NOSQL 近期越來越多的被提到,可是相信大部分架构师还是会选择 MYSQL 来做数据存储。
MYSQL 如此方便和稳定。以至于我们在开发 WEB 程序的时候非常少想到它。即使想到优化也是程序级别的,比方。不要写过于消耗资源的 SQL 语句。可是除此之外,在整个系统上仍然有非常多能够优化的地方。


1. 选择合适的存储引擎: InnoDB

除非你的数据表使用来做仅仅读或者全文检索 (相信如今提到全文检索,没人会用 MYSQL 了)。你应该默认选择 InnoDB 。
你自己在測试的时候可能会发现 MyISAM 比 InnoDB 速度快。这是由于: MyISAM 仅仅缓存索引,而 InnoDB 缓存数据和索引,MyISAM 不支持事务。可是 假设你使用 innodb_flush_log_at_trx_commit = 2 能够获得接近的读取性能 (相差百倍) 。

1.1 怎样将现有的 MyISAM 数据库转换为 InnoDB:

1
2
3
mysql -u [USER_NAME] -p -e "SHOW TABLES IN [DATABASE_NAME];" | tail -n +2 | xargs -I '{}' echo "ALTER TABLE {} ENGINE=InnoDB;" > alter_table.sql
perl -p -i -e 's/(search_[a-z_]+ ENGINE=)InnoDB//1MyISAM/g' alter_table.sql
mysql -u [USER_NAME] -p [DATABASE_NAME] < alter_table.sql

1.2 为每一个表分别创建 InnoDB FILE:innodb_file_per_table=1

这样能够保证 ibdata1 文件不会过大。失去控制。尤其是在运行 mysqlcheck -o –all-databases 的时候。


阅读全文 »

Apache RabbitMQ

发表于 2019-08-15 | 分类于 中间件 | 阅读次数:

Rabbit MQ

Spring Security Oauth2

发表于 2019-08-15 | 分类于 Java | 阅读次数:

Spring Security Oauth2


最近在研究Oauth2,打算将它应用到实际项目当中,主要是做接口鉴权这一块。

通过源码以及借鉴其他工程,有了如下了解:

  • OAuth2源码地址:https://github.com/spring-projects/spring-security-oauth
  • 本工程的源码地址:https://github.com/yanzhenyidai/oauth-example.git
阅读全文 »
12

Frank-Tan

Everybody UP!

13 日志
8 分类
8 标签
RSS
© 2021 Frank-Tan