EFK日志系统搭建
EFK日志系统搭建目录结构
123456789101112131415root@ubuntu:~/log-collect/EFK# tree├── docker-compose.yml├── .env├── elasticsearch│ ├── data│ └── Dockerfile├── fluentd│ ├── Dockerfile│ └── etc│ └── fluent.conf└── kibana ├── data ├── Dockerfile └── kibana.yml
新建目录
123mkdir -p EFK/elasticsearch/datamkdir -p EFK/kibana/datamkdir -p EFK/fluentd/etc
elasticsearchDockerfile123ARG ELK_VERSIONFROM docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION}
fluentdDockerfile123 ...
filebeat配置文件
filebeat配置文件https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html
Filebeat 有两大部分,inputs 和 harvesters,inputs 负责找文件(类似 find 命令)和管理 harvesters,一个 harvester 则和一个文件一一对应,一行行读然后发送给 output(类似tail -f)。
ignore_older
路径下的历史文件可能很多,比如配置了按天分割,显然旧文件我们一般是不需要的。
通过 ignore_older 参数解决,意思是多久前的旧文件不扫描。比如设置为 1h,表示文件时间在 1h 之前的日志都不会被 input 模块搜集,直到有新日志产生。
scan_frequency
扫描频率如何控制,通配设置复杂的话频繁扫文件也是很大的开销。
通过 scan_frequency 参数控制,表示多久扫描一次是否有新文件产生。比如设置 10s(默认),一个新文件产生 10s 后会被发现,或者一个旧文件(上面 ignore_ ...
ELK日志系统搭建
ELK日志系统搭建目录结构
123456789101112131415161718192021222324252627root@ubuntu:~/log-collect/ELK# tree├── docker-compose.yml├── .env├── elasticsearch│ ├── data│ └── Dockerfile├── filebeat│ ├── config│ │ └── filebeat.yml│ └── Dockerfile├── kibana│ ├── data│ ├── Dockerfile│ └── kibana.yml└── logstash ├── config │ ├── log4j2.properties │ ├── logstash.yml │ └── pipelines.yml ├── default_config │ ├── 02-beats-input.conf │ ├── 10-syslog-filter.conf │ └── ...
fluentd配置文件详解
fluentd配置文件详解
https://docs.fluentd.org/configuration/config-file
fluentd是一个实时的数据收集系统,不仅可以收集日志,还可以收集定期执行的命令输出和HTTP请求内容。
配置:
source:定义输入,数据的来源,input方向。
match:定义输出,下一步的去向,如写入文件,或者发送到指定软件存储。output方向。
filter:定义过滤,也即事件处理流水线,一般在输入和输出之间运行,可减少字段,也可丰富信息。
system:系统级别的设置,如日志级别、进程名称。
label:定义一组操作,从而实现复用和内部路由。
@include:引入其他文件,和Java、python的import类似。
输出调试:
12345678910<source> @type tail path /var/log/nginx/access.log pos_file /var/log/td-agent/nginx-access.log.pos tag nginx.access format nginx< ...
Portainer安装
简介Portainer 是一款轻量级的应用,它提供了图形化界面,用于方便地管理Docker环境,包括单机环境和集群环境。
安装
直接使用Docker来安装Portainer是非常方便的,仅需要两步即可完成。
搜索相关Portainer镜像,以免错过更好的第三方镜像
1docker search portainer
首先下载Portainer的Docker镜像;
1docker pull portainer/portainer
然后再使用如下命令运行Portainer容器;
1234567mkdir -p /root/portainer/datadocker run -p 9000:9000 -p 8000:8000 --name portainer \--restart=always \-v /var/run/docker.sock:/var/run/docker.sock \-v /root/portainer/data:/data \-d 6053537/portainer-ce
第一次登录的时候需要创建管理员账号,访问地址:http://127.0.0.1 ...
mysql json使用
mysql json使用 MySQL
一.对记录的操作1.创建有json字段的表
12-- 创建表CREATE TABLE t_json(id INT PRIMARY KEY, sname VARCHAR(20), info JSON);
2.插入记录
123456-- 插入含有json数组的记录INSERT INTO t_json(id,sname,info) VALUES( 1, 'name1', JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME()));-- 插入含有json对象的记录INSERT INTO t_json(id,sname,info) VALUES( 2, 'name2', JSON_OBJECT("age", 20, "time", now()));INSERT INTO t_json(id,sname,info) VALUES( 3, 'name3', '{"age" ...
python多版本管理
python多版本管理
https://github.com/pyenv/pyenv
https://github.com/pyenv/pyenv-virtualenv
https://github.com/pyenv-win/pyenv-win
安装安装相关依赖
123sudo apt-get updatesudo apt-get install --no-install-recommends make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-devsudo apt-get install git
安装pyenv
安装pyenv到$HOME下的.pyenv目录。
从仓库获取pyenv,放置到.pyenv目录。
1git clone https://github.com/pyen ...
golangci-lint在cicd中的应用
golangci-lint在cicd中的应用
https://my.oschina.net/u/2950272/blog/4992726
1.前言为了保证线上质量,需要每次上线对代码进行静态分析,而依赖开发者自觉是很难保证的。本文主要详细介绍一系列上线必须要通过的静态扫描规范。
2.必读官方规范golang 代码风格指南是官方开发指南,被golint 约束,主要包含内容如下:
Gofmt
Comment Sentences
Contexts
Copying
Crypto Rand
Declaring Empty Slices
Doc Comments
Don't Panic
Error Strings
Examples
Goroutine Lifetimes
Handle Errors
Imports
Import Blank
Import Dot
In-Band Errors
Indent Error Flow
Initialisms
Interfaces
Line Length
Mixed ...
内网穿透
内网穿透nps项目:https://github.com/ehang-io/nps
文档:https://ehang-io.github.io/nps
1.启动服务器服务器会占用80 443 8080(web) 8042(客户端连接)
启动服务器
1./nps
创建一个客户端
客户端命令:./npc -server=xxx.xxx.xxx.xxx:8024 -vkey=de2xxxxxxxx -type=tcp
2.TCP隧道
服务端端口:通过公网IP访问的端口
目标 (IP:端口):局域网内的IP和端口
服务端配置无需修改
启动客户端
1./npc -server=xxx.xxx.xxx.xxx:8024 -vkey=de2mxxxxxxx -type=tcp
3.域名解析
域名申请和证书的制作参考acme使用ZeroSSL申请泛域名
主机:绑定主机IP的域名
模式:http(通过nginx代理转到http端口)
目标 (IP:端口):局域网内的IP和端口
修改nps配置
123456789appname = nps#Boot mode(dev|pro)runmode ...
acme使用ZeroSSL申请泛域名
acme使用ZeroSSL申请泛域名1.安装acme.sh1curl https://get.acme.sh | sh
默认就是zerossl 的server,无需修改!
配置DNS API,各大DNS厂商都会提供各种APIkey!
123以cf为例:SAVED_CF_Key='8155245808e9ee11af'SAVED_CF_Email='develop@xx.com'
2.ZeroSSL账号申请ZeroSSL证书之前需要再官网注册账号,地址:https://zerossl.com/,此处注册的地址需要在acme申请域名时注册,才能申请!
例如我的注册账号是:abc@xx.com
3.Freenom免费的域名,地址:https://www.freenom.com,然后绑定服务器IP
4.注册zerossl账号1acme.sh --register-account -m abc@xx.com --server zerossl
5.申请 ...
Flutter代码开发规范
Flutter代码开发规范
[Flutter_Go 代码开发规范](https://github.com/alibaba/flutter-go/blob/master/Flutter_Go 代码开发规范.md)
Effective Dart: Style
代码风格标识符三种类型大驼峰类、枚举、typedef和类型参数
12345class SliderMenu { ... }class HttpRequest { ... }typedef Predicate = bool Function<T>(T value);
包括用于元数据注释的类
123456789class Foo { const Foo([arg]);}@Foo(anArg)class A { ... }@Foo()class B { ... }
如果注解类的构造函数是无参函数,则可以使用一个小驼峰风格的常量来初始化这个注解。
1234const foo = Foo();@fooclass C ...
Flutter动画
Flutter动画
https://coldstone.fun/post/2020/04/26/flutter-animation-from-zero/
动画选择
Flutter动画大的分类来说主要分为两大类:
补间动画:补间动画是一种预先定义物体运动的起点和终点,物体的运动方式,运动时间,时间曲线,然后从起点过渡到终点的动画。
基于物理的动画:基于物理的动画是一种模拟现实世界运动的动画,通过建立运动模型来实现。例如一个篮球🏀从高处落下,需要根据其下落高度,重力加速度,地面反弹力等影响因素来建立运动模型。
Flutter 中多种类型的动画,分别是
隐式动画
显式动画
Hero 动画
交织动画
基于物理的动画
一个动画的主要因素有
Animation对象是整个动画中非常核心的一个类;
AnimationController用于管理Animation;
CurvedAnimation过程是非线性曲线;
Tween补间动画
Listeners和StatusListeners用于监听动画状态改变。
Flutter 动画基于类型化的 Animation 对象,Widgets ...
flutter
awesomehttps://github.com/Solido/awesome-flutter
https://github.com/crazycodeboy/awesome-flutter-cn
状态管理https://github.com/alibaba/fish-redux
https://github.com/felangel/bloc
https://github.com/mobxjs/mobx.dart
https://github.com/rrousselGit/provider
https://github.com/jonataslaw/getx
五大常见的MySQL高可用方案
五大常见的MySQL高可用方案1. 概述我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面:
如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。
用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者最终保持一致。
当业务发生数据库切换时,切换前后的数据库内容应当一致,不会因为数据缺失或者数据不一致而影响业务。
关于对高可用的分级在这里我们不做详细的讨论,这里只讨论常用高可用方案的优缺点以及高可用方案的选型。
2. 高可用方案2.1. 主从或主主半同步复制使用双节点数据库,搭建单向或者双向的半同步复制。在5.7以后的版本中,由于lossless replication、logical多线程复制等一些列新特性的引入,使得MySQL原生半同步复制更加可靠。
常见架构如下:
通常会和proxy、keepalived等第三方软件同时使用,即可以用来监控数据库的健康,又可以执行一系列管理命令。如果主库发生故障,切换到备库后仍然可以继续使用数据库。
优点:
架构比较简单,使用原生半同步复制 ...
MySql集群搭建实战
MySql集群搭建实战
主从同步复制原理在开始之前,我们先来了解主从同步复制原理。
复制分成三步:
master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
slave将master的binary log events拷贝到它的中继日志(relay log);
slave重做中继日志中的事件,将改变反映它自己的数据。
该过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。
下一步就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡 ...
Redis集群环境搭建实践
Redis集群环境搭建实践
redis v6.2.5
ubuntu 20.04
Redis集群(Redis Cluster) 是Redis提供的分布式数据库方案,通过 分片(sharding) 来进行数据共享,并提供复制和故障转移功能。相比于主从复制、哨兵模式,Redis集群实现了较为完善的高可用方案,解决了存储能力受到单机限制,写操作无法负载均衡的问题。
编译安装123456cd /optwget http://download.redis.io/releases/redis-6.2.5.tar.gztar -xvf redis-6.2.5.tar.gzcd redis-6.2.5make MALLOC=libcmake install PREFIX=/usr/local/redis
集群环境搭建方便起见,这里集群环境的所有节点全部位于同一个服务器上,共6个节点以端口号区分,3个主节点+3个从节点。集群的简单架构如图:基于最新的Redis 6.0+,直接从github下载最新的源码编译获得常用工具 redis-server , redis-cli 。值得注意的是,从Redis ...
golang生成uml
golang使用PlantUML生成uml
安装golang sdk
PlantUML Web Server
开源工具,使用简单的文字描述画UML图。 (plantuml.com)
安装1234go get github.com/jfeliu007/goplantuml/parsergo get github.com/jfeliu007/goplantuml/cmd/goplantumlcd $GOPATH/src/github.com/jfeliu007/goplantuml/cmd/goplantuml/go install
安装到$GOPATH\bin
运行1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586# 单个目录goplantuml -recursive path/to/gofiles > ...
Flutter-SystemChrome
Flutter-SystemChrome
https://www.jianshu.com/p/84a103873b27
切换横竖屏时用到 SystemChrome,它作为一个全局属性,很像 Android的Application,功能很强大。
setPreferredOrientations在我们日常应用中可能会需要设置横竖屏,或锁定单方向屏幕等不同要求,通过 setPreferredOrientations 配合实现;简单可以按 portraitUp 上 / portraitDown 下 / landscapeLeft 右 / landscapeRight 左 来区分;
Tips:landscapeLeft 是以 portraitUp 顺时针旋转 90 度;landscapeRight 是以逆时针旋转 90 度,故是视觉相反。
1. 单方向若需要固定应用为单一方向,仅需设置所需要的方向属性即可;
12345678// 竖直上SystemChrome.setPreferredOrientations([DeviceOrientation.portrai ...
flutter版本管理
flutter版本管理
GitHub - befovy/fvm: Flutter Version Manager. Flutter 多版本管理工具。 本地缓存安装多个 Flutter 版本,随时快速切换
安装1go get -u -v github.com/befovy/fvm
设置环境如果环境变量中没有 FVM_HOME,fvm 将使用 os.UserConfigDir() append fvm 返回的默认值。 在 Mac OS 上,默认的 FVM_HOME 是 $HOME/Library/Application Support/fvm
12345export FVM_HOME=/opt/fvm #flutter安装目录export PUB_HOSTED_URL=http://mirrors.cnnic.cn/dart-pubexport FLUTTER_STORAGE_BASE_URL=http://mirrors.cnnic.cn/flutter export FVM_DIR="$HOME/.fvm"source ...
golang版本管理
golang版本管理
GitHub - voidint/g: Golang Version Manager
g是一个Linux、macOS、Windows下的命令行工具,可以提供一个便捷的多版本go环境的管理和切换
特性
支持列出可供安装的go版本号
支持列出已安装的go版本号
支持在本地安装多个go版本
支持卸载已安装的go版本
支持在已安装的go版本之间自由切换
设置环境变量12345678910111213141516171819# 由于国内无法自由访问Golang官网,导致查询及下载go版本都变得困难,因此可以通过该环境变量指定一个镜像站点。# https://studygolang.com/dlG_MIRROR=https://golang.google.cn/dl/# 自定义golang安装目录G_EXPERIMENTAL=true# 设置g的工作目录G_HOME=f:\gvm# golang软连接GOROOT=%G_HOME%\go#bin src pkgGOPATH=%G_HOME%\gopath# go install github.com/voidi ...