ELK-Logstash 按周创建Elasticsearch索引
按月创建的Elasticsearch索引名称,还没到月底,日志单索引9千多万行,es顶不住了。
1index => "nginx-%{beat[hostname]}-access-%{+YYYY.MM}"
于是决定按周创建Elasticsearch索引。
123mutate { update => {"[@metadata][target_index]" => "k8s_access-%{+YYYY.MM}-%{+YYYY.ww}"}}
结果如下 %{+YYYY.ww} 即 2021.35 ,第35周
ELK-Logstah 定义管道解析Nginx日志传递至Elasticsearch
通过filebeat读取日志后传送至logstash进行处理,处理完成再保存在elasticsearch中。其中最重要的一步就是logstash的处理,我们需要根据日志的格式编写相关的匹配代码,以便logstash进行匹配处理。
在这里我使用过滤插件中的Grok插件,具体技术文档请点击以下链接:https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html
在编写grok捕获规则时,可以使用以下网站进行辅助:https://grokdebug.herokuapp.com/
相关的语法可以参考以下GitHub页面:https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
Logstash Reference [7.12] » Filter pluginshttps://www.elastic.co/guide/en/logstash/current/filter-plugins.html
nginx日志分析1' ...
k8s企业级DevOps实践-虚拟化介绍和Docker原理深入
虚拟化核心需要解决的问题:资源隔离与资源限制
虚拟机硬件虚拟化技术, 通过一个 hypervisor 层实现对资源的彻底隔离。
容器则是操作系统级别的虚拟化,利用的是内核的 Cgroup 和 Namespace 特性,此功能完全通过软件实现。
Namespace 资源隔离命名空间是全局资源的一种抽象,将资源放到不同的命名空间中,各个命名空间中的资源是相互隔离的。 通俗来讲,就是docker在启动一个容器的时候,会调用Linux Kernel Namespace的接口,来创建一块虚拟空间,创建的时候,可以支持设置下面这几种(可以随意选择),docker默认都设置。
pid:用于进程隔离(PID:进程ID)
net:管理网络接口(NET:网络)
ipc:管理对 IPC 资源的访问(IPC:进程间通信(信号量、消息队列和共享内存))
mnt:管理文件系统挂载点(MNT:挂载)
uts:隔离主机名和域名
user:隔离用户和用户组(3.8以后的内核才支持)
12345678910111213141516171819202122func setNamespaces(daemon *Dae ...
k8s企业级DevOps实践-Django应用容器化实践
django项目介绍
项目地址:https://gitee.com/pinchengx/pythondemo.git
python3 + uwsgi + nginx + mysql
内部服务端口8002
构建命令1$ docker build . -t ImageName:ImageTag -f Dockerfile
如何理解构建镜像的过程?
Dockerfile是一堆指令,在docker build的时候,按照该指令进行操作,最终生成我们期望的镜像
FROM 指定基础镜像,必须为第一个命令
1234567格式: FROM <image> FROM <image>:<tag>示例: FROM mysql:5.7注意: tag是可选的,如果不使用tag时,会使用latest版本的基础镜像
MAINTAINER 镜像维护者的信息
123456格式: MAINTAINER <name>示例: MAINTAINER Yongxin Li MAINTAINER inspur_lyx@hotmail.com M ...
k8s企业级DevOps实践-搭建镜像仓库
搭建本地镜像仓库1234567891011121314151617181920212223242526272829[root@localhost ~]# cd /opt/[root@localhost opt]# ll总用量 1281480-rw-r--r--. 1 root root 1312232098 4月 11 17:55 registry.tar.gz[root@localhost opt]# tar -xf registry.tar.gz [root@localhost registry-data]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZE[root@localhost opt]# lsregistry-data registry.tar.gz[root@localhost opt]# cd registry-data/[root@localhost registry-data]# ll总用量 25728drwxr- ...
Golang-接口
接口接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。
接口类型在Go语言中接口(interface)是一种类型,一种抽象的类型。
interface是一组method(方法)的集合,是duck-type programming的一种体现。接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机。不关心属性(数据),只关心行为(方法)。
为了保护你的Go语言职业生涯,请牢记接口(interface)是一种类型。
为什么要使用接口?
1234567891011121314151617181920212223242526272829303132333435363738394041type Cat struct{}type Dog struct{}type Pig struct{}func (c Cat) Say() string { return "喵喵喵" }func (d Dog) Say() strin ...
Golang-指针、类型自定义、类型别名、结构体、json序列化、面向对象、包
指针指针地址、指针类型、指针取值
指针概念:任何程序数据载入内存后,在内存都有他们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。
指针和地址的区别:
地址:就是内存地址(用字节来描述的内存地址)
指针:指针是带类型的
Go语言中的指针不能进行偏移和运算,因此Go语言中的指针操作非常简单,我们只需要记住两个符号:&(取地址)和*(根据地址取值)。
Go语言中使用&字符放在变量前面对变量进行“取地址”操作。 Go语言中的值类型(int、float、bool、string、array、struct)都有对应的指针类型,如:*int、*int64、*string等。
指针取值12345678func main() { var a int = 2 b := &a //取变量a的内存地址 fmt.Printf("%T,%v\n",b,b)//*int,0xc00000a0b0 fmt.Println(*b) //根据内存地址取值 //2}
总结: 取地址操作符&和取值操作符*是一对互补操作 ...
Golang-变量、常量、基本数据类型、流程控制、运算符、数组、切片、map
变量、常量变量声明1234567891011121314标准声明:var name string var age int var isOk bool//变量声明以关键字var开头,变量类型放在变量的后面,行尾无需分号。 批量声明:var ( a string b int c bool d float32 )//每声明一个变量就需要写var关键字会比较繁琐,go语言中还支持批量变量声明:
语法格式1var 变量名 变量类型
变量的初始化Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为0。 字符串变量的默认值为空字符串。 布尔型变量默认为false。 切片、函数、指针变量的默认为nil。
12var 变量名 类型 = 表达式//在声明变量的时候为其指定初始值。变量初始化的标准格式
举个例子:
12var name string = "Q1mi"var age int = 18
一次性初始化多个变量
1var name, age ...
Docker安装Skywalking
采用H2部署oapskywalking默认的数据存储方式即是内存数据库H2。该方式用于方便体验skywalking,但不推荐使用在生产环境。
运行容器命令:
1234567docker run --name oap-h2 --restart always -d \--restart=always \-e TZ=Asia/Shanghai \-p 12800:12800 \-p 11800:11800 \-e SW_STORAGE=h2 \apache/skywalking-oap-server:8.3.0-es7
采用MySQL部署oap需要注意原生的docker镜像中没有mysql驱动,所以需要手动上传mysql的驱动到/skywalking/oap-libs/下,命令如下:
1docker cp mysql-connector-java-8.0.19.jar e2ea45eb7118124cf1d89bdf4eac1e798f857d1a2b6d7b43416bf30a57d2af6b:/skywalking/oap-libs/mysql-connector-java-8.0.19 ...
Docker-手动构建dotnet镜像
docker环境12345678910111213[root@wikifx2 ~]# docker image lsREPOSITORY TAG IMAGE ID CREATED SIZEnginx latest 0901fa9da894 10 days ago 132MBnginx latest 0901fa9da894 10 days ago 132MBalpine latest a24bb4013296 7 weeks ago 5.57MBcentos 7 b5b4d78bc90c 2 months ago 203MB[root@wikifx2 ~]# ...
Docker-安装&基础管理
Docker介绍什么是容器?容器就是在隔离的环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,ip地址, 主机名等。
docker的主要组成部分docker是传统的CS架构分为docker client和docker server,向mysql一样docker主要组件有:镜像、容器、仓库、网络、存储
Docker安装12[root@wikifx2 ~]# uname -r3.10.0-1127.13.1.el7.x86_64
配置网卡转发,看值是否为112$ sysctl -a |grep -w net.ipv4.ip_forwardnet.ipv4.ip_forward = 1
若未配置,需要执行如下123456$ cat <<EOF > /etc/sysctl.d/docker.confnet.bridge.bridge-nf-call-ip6tables = 1net.bridge.bridge-nf-call-iptables = 1net.ipv4.ip_forward=1EOF$ sysctl -p /etc/sysct ...
SVN-集中式版本控制系统部署
版本控制工具功能
协同修改
多人并行不悖的修改服务器端的同一个文件。
数据备份
如果本地文件发生丢失可以服务器端文件进行恢复。
增量式的版本管理
服务器端保存每一个版本信息时只保存有修改的局部内容,节约服务器端资源。
权限控制
对团队中参与开发的人员进行权限控制。
历史记录
查看修改人、修改时间、修改内容、日志信息。
将本地文件恢复到某一个历史状态。
版本控制简介版本控制工程设计领域中使用版本控制管理工程蓝图的设计过程。在 IT 开发过程中也可以 使用版本控制思想管理代码的版本迭代。
版本控制工具
思想:版本控制
实现:版本控制工具
集中式版本控制工具: CVS、SVN、VSS……
分布式版本控制工具: Git
SVN基本操作
检出(Checkout)
把服务器端版本库内容完整下载到本地。
在整个开发过程中只做一次。
更新(Update)
把服务器端相对于本地的新的修改下载到本地。
提交(Commit)
把本地修改上传到服务器
安装SVN12345678910111213141516171819[root@wikifx ~]# yum i ...
Zookeeper-单节点与分布式
ZooKeeper是一个分布式开源框架,提供了协调分布式应用的基本服务,它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度,提供高性能的分布式服务。ZooKeeper本身可以以Standalone模式安装运行,不过它的长处在于通过分布式ZooKeeper集群(一个Leader,多个Follower),基于一定的策略来保证ZooKeeper集群的稳定性和可用性,从而实现分布式应用的可靠性。
环境准备规范目录1234567#root用户执行useradd hadoopmkdir -p /application/hadoop #zookeeper安装目录mkdir -p /data/zookeeper/zkdata #zookeeper数据目录mkdir -p /data/zookeeper/zklog #zookeeper日志目录chown -R hadoop.hadoop /application/hadoop ...
ELK-Filebeat7.4.0单机多实例
起因业务需求,已经转成json格式的nginx日志直接通过filebeat传入了Elasticsearch中,而其他程序日志需要通过filebeat传入logstash进行二次过滤。就需要解决多output的问题。而根据官方文档:
You configure Filebeat to write to a specific output by setting options in the Outputs section of the filebeat.yml config file. Only a single output may be defined.
可知filebeat.yml中output有且只能有一个。当然你可以在filebeat.ymlinput模块中添加多个tags,并传递给logstash,并在logstash上通过不同的标签区分后传入不同的index中。
配置单机多实例filebeat介绍logstash 和filebeat都具有日志收集功能,因为filebeat由Golang编写相较于logstash更轻量,占用资源更少。所以决定在同一台机器上启动两个fileb ...
MongoDB-构建副本集&扩容缩容&仲裁节点
副本集架构介绍一个包含3个mongo的复制集架构如下所示:如果主节点失效,会变成:如果加上可选的仲裁节点:拥有仲裁节点情况下主服务器失效:
环境准备:单机多实例目录规划以/application/mongo_端口号/为单机多实例存放目录
Server
Role
10.0.0.51:28017
PRIMARY
10.0.0.51:28018
SECONDARY
10.0.0.51:28019
SECONDARY
10.0.0.51:28010
ARBITER(可选)
创建多实例目录1234567891011121314[root@db01 ~]# mkdir -p /application/mongo_cluster/mongo_2801{7,8,9}/{conf,logs,pid}[root@db01 ~]# tree /application/mongo_cluster/mongo_2801*/application/mongo_cluster/mongo_28017├── conf├── logs└── pid/a ...
JumpServer-1.5.4堡垒机部署
环境准备:JumpServer环境要求硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘(最低)操作系统: CentOS7
Python = 3.6.xMysql Server ≥ 5.7Redis
关闭防火墙和Selinux12~]# setenforce 0 # 可以设置配置文件永久关闭~]# systemctl stop firewalld.service ; systemctl disable firewalld.service
修改字符集,否则可能报 input/output error的问题,因为日志里打印了中文123~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8~]# export LC_ALL=zh_CN.UTF-8~]# echo 'LANG=zh_CN.UTF-8' > /etc/locale.conf
安装依赖1yum install -y wget gcc epel-release python36-devel openssl openssl-devel automake zli ...
MongoDB-CRUD&运维工具介绍以及授权认证
MongoDB-CRUD
介绍
1.1 CRUD 操作是 create(创建), read(读取), update(更新)和 delete(删除) 文档。
1.2 MongoDB 不支持多文档事务(mongodb4.0 开始支持 ACID)。但是 MongoDB 确实在一个文档上提供了原子操作。尽管集合中的文档通常都是相同的,但是 MongoDB 中的集合不需要指定 schema。
1.3 MongoDB 不支持 SQL 但是支持自己的丰富的查询语言。
1.4 在 MongoDB 中,存储在集合中的每个文档都需要一个唯一的 _id 字段,作为主键。如果插入的文档省略了该_id 字段,则 MongoDB 驱动程序将自动为该字段生成一个 ObjectId_id。也用于通过更新操作插入的文档upsert: true.如果文档包含一个_id 字段,该_id 值在集合中必须是唯一的,以避免重复键错误。
1.5 在 MongoDB 中,插入操作针对单个集合。 MongoDB 中的所有写操作都是在单个文档的级别上进行的
显示命令Help: 显示帮助。db.help() 显示数据库方法的帮助。db. ...
MongoDB-4.0.18介绍与C7下的二进制安装
背景介绍:关系型于非关系型
NoSQL(not only sql)指的是 非关系型的数据库
NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。
对NoSQL是普遍的解释是”非关联型的”,强调 Key-Value Stores 和 文档数据库的优点,而不是单纯的RDBMS。
NoSQL用于超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。
Mongo和MySQL数据对比结构对比:
MySQL
MongoDB
库
库
表
集合
字段
Key:Value
记录行
文档
内容对比:12345678910## mysql数据结构:name age job hostoldzhang 28 it xiaozhang 28 itxiaofei 18 student SZ## mongo数据结构:{name:'oldzhang',age:'28',job:'i ...
Redis-维护工具&常用命令总结
Redis 集群常用命令集群(cluster)
CLUSTER INFO 打印集群的信息
CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。
节点(node)
CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。
CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
槽(slot)
CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽, ...
Redis-Cluster 分布式高可用集群
redis cluster 分布式集群介绍高性能:
在多分片节点中,将16384个槽位,均匀分布到多个分片节点中
存数据时,将key做crc16(key),然后和16384进行取模,得出槽位(0-16383)
根据计算得出的槽位值,找到想对应的分片节点的主节点,存储到相应槽位上
如果客户端当时连接的节点不是将来要存储的分片节点,分片集群会将客户端连接却换至真正存储节点进行数据存储
高可用:在搭建集群时,会为每一个分片的主节点,对应一个从节点,实现slaveof的功能,同时当主节点down,实现类似于sentinel的自动fileover的功能。
redis会为多组分片构成(3组)
redis cluster 使用固定个数的slot存储数据(一个16384slot)
每组分片分得1/3 slot个数(0-5500 5501-11000 11001-16383)
基于CRC16(key)% 16384 –> 值 (槽位号)
分布式架构部署6个redis实例,一般会放到3台硬件服务器
Role
IP
Port
Server
Mas ...