首页 文章 精选 留言 我的

精选列表

搜索[企业级],共10001篇文章
优秀的个人博客,低调大师

awk高级企业级使用案例

一、背景: 以某物联网企业,传感器设备实时数据消费服务(Kafka-consumer)为例,调试筛选处理耗时的主题。 1.原始日志格式(logback输出的): 2018-07-11 11:49:22.413 INFO 29244 ---[TW_safeclound_elec_line_v-1531280885818] c.s.s.s.l.TimeoutInvokeMethodAspect :消费处理耗时: 10148 ms, method=ConsumerElecLineVDataListener.lineVData(..), args={"addr":"11111118","bid":"QQBE","cid":"BLWY","dataType":"ELE_R_LV","id":"11111118,85,117,ELE_R_LV,1531280962413","lineAB":396.77,"lineBC":395.75,"lineCA":396.42,"meterType":"117","order":"85","timestamp":1531280951758} 2.使用tail+awk命令进行耗时执行方法筛选: [root@web-prod ~]# tail -f/mnt/disk1/sink/logs/sink.log|grep耗时| awk -F'''$10>200&&$10<500{print$1,$2,$6,$10,$11}' 2018-07-14 22:59:40.163 [TW_safeclound_largestDemand-1531512341755] 441 ms, 2018-07-14 22:59:40.516 [TW_safeclound_rate_v-1531512332686] 363 ms, 2018-07-14 22:59:40.665 [TW_safeclound_rate_i-1531512317893] 375 ms, 2018-07-14 22:59:40.866 [TW_safeclound_water-1531512518874] 332 ms, ... 3.注释: a.其中 awk的-F 参数表示:日志字符串分隔符,默认为''空格; b.$10>100表示我要筛选耗时大于 100 毫秒的日志; c.{print$1,$2,$6,$10,$11}表示打印被awk分隔后的第1段(日期)、第2段(时间)、第6段(主题)、第10段(耗时)、第11段字符串(耗时单位); d.其中$10>200&&$10<500表示我要筛选耗时在200~500之前的消费主题;

优秀的个人博客,低调大师

Docker--------企业级最佳入门

1. 背景 *Docker是Docker.inc公司开源的一个基于LXC技术之上构建的Container容器引擎,源代码托管在GitHub上,基于Go语言并遵从Apache2.0协议开源。 *Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。 *Docker是通过内核虚拟化技术(namespaces及cgroups等)来提供容器的资源隔离与安全保障等。由于Docker通过操作系统层的虚拟化实现隔离,所以Docker容器在运行时,不需要类似虚拟机VM额外的操作系统开销,提高资源利用率。 2. 优势 *部署简单 *管理简单 *秒级应用启动 *与宿主机使用同一个内核,性能损耗小 *隔离性高 *镜像一次构建,到处运行 3. 应用场景 *简化配置,统一配置,通过镜像快速启动(Simplifying) *代码流水线管理,开发环境->测试环境->预生产环境->灰度发布->正式发布,docker在这里实现了快速迁移(Code Oioeline Management) *开发效率,对开发人员,有了镜像,直接启动容器即可(Developer Productivity) *应用隔离,相对于虚拟机的完全隔离会占用资源,docker会比较节约资源(Applsolation) *服务器整合,一台服务器跑多个docker容器,提高服务器的利用率(Server Consolidation) *调试能力,debug调试(Debugging Capabilties) *多租户,一个租户多个用户,类似于阿里公有云的一个project下多个用户(Multi-tenancy) *快速部署,不需要启动操作系统,实现秒级部署(Rapid Deplovment) 4. docker相关注意 *容器不同于虚拟机 *容器理论推荐单一进程 *容器不如虚拟机来得成熟 *容器可以在几分之一秒内启动 *容器已在大规模环境证明了自身的价值 *IT人员称容器为轻量级 *Docker已成为容器的代名词,但它不是唯一的提供者 *容器能节省IT人力,加快业务更新效率 5. docker与容器本身意义 *面向产品: 简化交付流程 *面向开发: 简化环境配置 *面向测试: 多版本测试 *面向运维: 简化环境问题 *面向架构: 自动化扩容 [ 微服务 ] 6. 使用Docker原因 作为一种新兴的虚拟化方式,Docker跟传统的虚拟化方式具有众多的优势。 首先,Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。其次,Docker对系统资源的利用率很低,一台主机上可以同时运行数千个Docker容器。 6. docker相关概念 **镜像 [ image ] *Docker镜像就是一个只读的模板。 例如:一个镜像可以包含一个完整的CentOS操作系统环境,里面仅安装了Apache或用户需要的其他应用程序。 镜像可以用来创建Docker容器。 Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。 **容器 [ container ] *Docker利用容器来运行应用。 容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。 可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。 **仓库 [ registry ] *仓库是集中存放镜像文件的场所。有时候把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。 仓库分为公开仓库(Public)和私有仓库(Private)两种形式。 最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供大陆用户更稳定快读的访问。 当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下载在另外一台机器上使用这个镜像时候,只需需要从仓库上pull下来就可以了。 7. docker实战 *系统环境 [ docker运行环境推荐在 linux 内核大于 2.6 ] 1 2 3 4 [root@docker~] #cat/etc/redhat-release CentOSLinuxrelease7.2.1511(Core) [root@docker~] #uname-r 3.10.0-327.36.3.el7.x86_64 *docker 服务安装 1 [root@docker~] #yuminstalldocker *启动 docker 服务 1 [root@docker~] #systemctlstartdocker.service *查看 docker 版本信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 [root@docker~] #dockerversion Client: Version:1.12.6 APIversion:1.24 Packageversion:docker-1.12.6-28.git1398f24.el7.centos.x86_64 Goversion:go1.7.4 Gitcommit:1398f24 /1 .12.6 Built:FriMay2617:28:182017 OS /Arch :linux /amd64 Server: Version:1.12.6 APIversion:1.24 Packageversion:docker-1.12.6-28.git1398f24.el7.centos.x86_64 Goversion:go1.7.4 Gitcommit:1398f24 /1 .12.6 Built:FriMay2617:28:182017 OS /Arch :linux /amd64 *在 docker hub 仓库上搜索镜像[ 默认从docker.io上搜索 ] docker search 镜像名称:版本号[ 不填默认为latest ] INDEX: 搜索源 NAME: 镜像名称 DESCRIPTION: 描述 STARS: 下载次数 OFFICIAL: 是否官方 AUTOMATED: 是否自动化 1 2 3 4 5 6 [root@docker~] #dockersearchcentos INDEXNAMEDESCRIPTIONSTARSOFFICIALAUTOMATED docker.iodocker.io /centos TheofficialbuildofCentOS.3397[OK] docker.iodocker.io /jdeathe/centos-ssh CentOS-66.9x86_64/CentOS-77.3.1611x8...70[OK] docker.iodocker.io /nimmis/java-centos ThisisdockerimagesofCentOS7withdif...26[OK] docker.iodocker.io /gluster/gluster-centos OfficialGlusterFSImage[CentOS-7+Glu...19[OK] *从 docker hub 仓库上获取(下载)镜像至本地库 [ 默认从docker.io上下载 ] docker pull 镜像名称:版本号[ 不填默认为latest ] 1 [root@docker~] #dockerpullcentos *查看本地库所有镜像 docker images 1 2 3 [root@docker~] #dockerimages REPOSITORYTAGIMAGEIDCREATEDSIZE docker.io /centos latest3bee3060bfc89daysago192.5MB *导出本地库镜像 docker save 镜像名称:版本号 > 导出文件名 1 [root@docker~] #dockersavecentos>centos.tar.gz *删除本地库镜像 docker rmi镜像名称:版本号 1 2 3 4 [root@docker~] #dockerrmicentos Untagged:centos:latest Untagged:docker.io /centos @sha256:aebf12af704307dfa0079b3babdca8d7e8ff6564696882bcb5d11f1d461f9ee9 Deleted:sha256:3bee3060bfc81c061ce7069df35ce090593bda584d4ef464bc0f38086c11371d *导入镜像文件至本地库 docker load < 镜像文件 1 2 [root@docker~] #dockerload<centos.tar.gz Loadedimage:docker.io /centos :latest *新建容器并运行 当利用docker run来创建容器时,Docker在后台运行的标准操作包括: *检查本地是否存在指定的镜像,不存在就从公有仓库下载 *利用镜像创建并启动一个容器 *分配一个文件系统,并在只读的镜像层外面挂在一层可读写层 *从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去 *从地址池配置一个ip地址给容器 *执行用户指定的应用程序 *执行完毕后容器被终止 docker run [option....] 例如:运行一个容器,指定名称为hello, 输出hello之后终止容器 1 2 [root@docker~] #dockerrun--namehellocentosecho"hello" hello 例如:启动一个容器,指定bash命令,并进入容器内部 -i: 则让容器的标准输入保持打开。 -t: 让Docker分配一个伪终端,并绑定到容器的标准输入上 /bin/bash: 执行一个命令 1 2 3 [root@docker~] #dockerrun-itcentos/bin/bash [root@b4473c885f51/] #pwd / *退出并不关闭容器 ctrl + p + q 1 [root@f91270f431bd/] #[root@docker~]# *启动已终止容器 docker start 容器名称 1 2 [root@docker~] #dockerstarthello hello *以守护进程运行 更多的时候,需要让Docker容器在后台以守护形式运行。此时可以通过添加-d参数来实现。 docker run -d [opation...] 1 2 [root@docker~] #dockerrun--namedaemon-dcentos/bin/bash 6fd939dd05004e18248e04d10de88076c61878aea904093e24e122a907371234 *查看正在运行的容器 docker ps 1 [root@docker~] #dockerps *查看所有容器 1 2 3 [root@docker~] #dockerps-a CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 65c0868177e7centos "/bin/bash" 34secondsagoExited(0)32secondsagodaemon *停止正在运行的容器 docker stop 容器名称或唯一容器ID [容器ID通过ps CONTAINER ID 查看] 1 2 [root@docker~] #dockerstopdaemon daemon *删除已停止的容器 docker rm 容器名称或唯一容器ID[容器ID通过psCONTAINER ID 查看] 1 2 [root@docker~] #dockerrmdaemon daemon 8. 总结 以需求驱动技术,技术本身没有优略之分,只有业务之分。 本文转自asd1123509133 51CTO博客,原文链接:http://blog.51cto.com/lisea/1936855,如需转载请自行联系原作者

优秀的个人博客,低调大师

企业级日志收集系统——ELKstack

ELKstack简介: ELKstack是Elasticsearch、Logstash、Kibana三个开源软件的组合而成,形成一款强大的实时日志收集展示系统。 各组件作用如下: Logstash:日志收集工具,可以从本地磁盘,网络服务(自己监听端口,接受用户日志),消息队列中收集各种各样的日志,然后进行过滤分析,并将日志输出到Elasticsearch中。 Elasticsearch:日志分布式存储/搜索工具,原生支持集群功能,可以将指定时间的日志生成一个索引,加快日志查询和访问。 Kibana:可视化日志Web展示工具,对Elasticsearch中存储的日志进行展示,还可以生成炫丽的仪表盘。 使用ELKstack对运维工作的好处: 1、应用程序的日志大部分都是输出在服务器的日志文件中,这些日志大多数都是开发人员来看,然后开发却没有登陆服务器的权限,如果开发人员需要查看日志就需要到服务器来拿日志,然后交给开发;试想下,一个公司有10个开发,一个开发每天找运维拿一次日志,对运维人员来说就是一个不小的工作量,这样大大影响了运维的工作效率,部署ELKstack之后,开发任意就可以直接登陆到Kibana中进行日志的查看,就不需要通过运维查看日志,这样就减轻了运维的工作。 2、日志种类多,且分散在不同的位置难以查找:如LAMP/LNMP网站出现访问故障,这个时候可能就需要通过查询日志来进行分析故障原因,如果需要查看apache的错误日志,就需要登陆到Apache服务器查看,如果查看数据库错误日志就需要登陆到数据库查询,试想一下,如果是一个集群环境几十台主机呢?这时如果部署了ELKstack就可以登陆到Kibana页面进行查看日志,查看不同类型的日志只需要电动鼠标切换一下索引即可。 ELKstack实验架构图: redis消息队列作用说明: 1、防止Logstash和ES无法正常通信,从而丢失日志。 2、防止日志量过大导致ES无法承受大量写操作从而丢失日志。 3、应用程序(php,java)在输出日志时,可以直接输出到消息队列,从而完成日志收集。 补充:如果redis使用的消息队列出现扩展瓶颈,可以使用更加强大的kafka,flume来代替。 实验环境说明: [root@es1~]#cat/etc/redhat-release CentOSLinuxrelease7.2.1511(Core) [root@es1~]#uname-rm 3.10.0-327.el7.x86_64x86_64 使用软件说明: 1、jdk-8u92 官方rpm包 2、Elasticsearch 2.3.3 官方rpm包 3、Logstash 2.3.2 官方rpm包 4、Kibana 4.5.1 官方rpm包 5、Redis 3.2.1 remi rpm 包 6、nginx 1.10.0-1 官方rpm包 部署顺序说明: 1、Elasticsearch集群配置 2、Logstash客户端配置(直接写入数据到ES集群,写入系统messages日志) 3、Redis消息队列配置(Logstash写入数据到消息队列) 4、Kibana部署 5、nginx负载均衡Kibana请求 6、手机nginx日志 7、Kibana报表功能说明 配置注意事项: 1、时间必须同步 2、关闭防火墙,selinux 3、出了问题,检查日志 Elasticsearch集群安装配置 1、配置Java环境 [root@es1~]#yum-yinstalljdk1.8.0_92 [root@es1~]#java-version javaversion"1.8.0_92" Java(TM)SERuntimeEnvironment(build1.8.0_92-b14) JavaHotSpot(TM)64-BitServerVM(build25.92-b14,mixedmode) 2、安装Elasticsearch,因为我这里yum源已经创建好,所以可以直接安装 官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html 官方下载地址:https://www.elastic.co/downloads/elasticsearch [root@es1~]#yum-yinstallelasticstarch [root@es1~]#rpm-qlelasticsearch /etc/elasticsearch /etc/elasticsearch/elasticsearch.yml#主配置文件 /etc/elasticsearch/logging.yml /etc/elasticsearch/scripts /etc/init.d/elasticsearch /etc/sysconfig/elasticsearch /usr/lib/sysctl.d /usr/lib/sysctl.d/elasticsearch.conf /usr/lib/systemd/system/elasticsearch.service#启动脚本 /usr/lib/tmpfiles.d /usr/lib/tmpfiles.d/elasticsearch.conf 3、修改配置文件,这里的一些路径看个人习惯 [root@es1~]#vim/etc/elasticsearch/elasticsearch.yml 17cluster.name:"linux-ES" 23node.name:es1.bjwf.com 33path.data:/elk/data 37path.logs:/elk/logs 43bootstrap.mlockall:true 54network.host:0.0.0.0 58http.port:9200 68discovery.zen.ping.unicast.hosts:["192.168.130.221","192.168.130.222"] 4、创建相关目录并赋予权限 [root@es1~]#mkdir-pv/elk/{data,logs} [root@es1~]#chown-Relasticsearch.elasticsearch/elk [root@es1~]#ll/elk drwxr-xr-x.2elasticsearchelasticsearch6Jun2803:51data drwxr-xr-x.2elasticsearchelasticsearch6Jun2803:51logs 5、启动ES,并检查是否监听9200和9300端口 [root@es1~]#systemctlstartelasticsearch.service [root@es1~]#netstat-tnlp|egrep"9200|9300" tcp600:::9200:::*LISTEN17535/java tcp600:::9300:::*LISTEN17535/java 6、安装另一台机器,步骤与第一台一样 [root@es2~]#vim/etc/elasticsearch/elasticsearch.yml 23node.name:es2.bjwf.com#主要修改主机名 7、查看两个节点的状态 配置集群管理插件(head、kopf等) 官方提供了一个ES集群管理插件,可以非常直观的查看ES的集群状态和索引数据信息 [root@es1~]#/usr/share/elasticsearch/bin/plugininstallmobz/elasticsearch-head [root@es1~]#/usr/share/elasticsearch/bin/plugininstalllmenezes/elasticsearch-kopf 访问插件: http://192.168.130.222:9200/_plugin/head/ http://192.168.130.222:9200/_plugin/kopf/ 上面已经把ES集群配置完成了,下面就可以配置Logstash向ES集群中写入数据了 Logstash部署 1、配置Java环境,安装logstash [root@logstash1~]#yum-yinstalljdk1.8.0_92 [root@logstash1~]#yum-yinstalllogstash 2、通过配置文件验证Logstash的输入和输出 [root@logstash1~]#vim/etc/logstash/conf.d/stdout.conf input{ stdin{} } output{ stdout{ codec=>"rubydebug" } } 3、定义输出到Elasticsearch [root@logstash1~]#vim/etc/logstash/conf.d/logstash.conf input{ stdin{} } output{ input{ stdin{} } output{ elasticsearch{ hosts=>["192.168.130.221:9200","192.168.130.222:9200"] index=>"test" } } [root@logstash1~]#/opt/logstash/bin/logstash-f/etc/logstash/conf.d/logstash.conf Settings:Defaultpipelineworkers:4 Pipelinemainstarted hello! 你好 这个时候说明,Logstash接好Elasticsearch是可以正常工作的,下面介绍如何收集系统日志 4、Logstash收集系统日志 修改Logstash配置文件如下所示内容,并启动Logstash服务就可以在head中正常看到messages的日志已经写入到了ES中,并且创建了索引 [root@logstash1~]#vim/etc/logstash/conf.d/logstash.conf input{ file{ type=>"messagelog" path=>"/var/log/messages" start_position=>"beginning" } } output{ file{ path=>"/tmp/123.txt" } elasticsearch{ hosts=>["192.168.130.221:9200","192.168.130.222:9200"] index=>"system-messages-%{+yyyy.MM.dd}" } } #检查配置文件语法: /etc/init.d/logstashconfigtest /opt/logstash/bin/logstash-f/etc/logstash/conf.d/logstash.conf--configtest #更改启动Logstash用户: #vim/etc/init.d/logstash LS_USER=root LS_GROUP=root #通过配置文件启动 [root@logstash1~]#/opt/logstash/bin/logstash-f/etc/logstash/conf.d/logstash.conf& 收集成功如图所示,自动生成了system-messages的索引 Kibana部署 说明:我这里是在两个ES节点部署kibana并且使用nginx实现负载均衡,如果没有特殊需要,可以只部署单台节点 1、安装Kibana,每个ES节点部署一个 [root@es1~]#yum-yinstallkibana 2、配置Kibana,只需要指定ES地址其他配置保持默认即可 [root@es1~]#vim/opt/kibana/config/kibana.yml 15elasticsearch.url:"http://192.168.130.221:9200" [root@es1~]#systemctlstartkibana.service [root@es1~]#netstat-tnlp|grep5601#Kibana监听端口 tcp000.0.0.0:56010.0.0.0:*LISTEN17880/node 查看效果,这个图是盗版的。。我做的这,忘记截图了 创建完成后 filebeat部署收集日志 1、安装nginx并将日志转换为json [root@logstash1~]#yum-yinstallnginx [root@logstash1~]#vim/etc/nginx/nginx.conf log_formataccess1'{"@timestamp":"$time_iso8601",' '"host":"$server_addr",' '"clientip":"$remote_addr",' '"size":$body_bytes_sent,' '"responsetime":$request_time,' '"upstreamtime":"$upstream_response_time",' '"upstreamhost":"$upstream_addr",' '"http_host":"$host",' '"url":"$uri",' '"domain":"$host",' '"xff":"$http_x_forwarded_for",' '"referer":"$http_referer",' '"status":"$status"}'; access_log/var/log/nginx/access.logaccess1; #保存配置文件,启动服务 [root@logstash1~]#systemctlstartnginx #验证nginx日志转json [root@logstash1~]#tail/var/log/nginx/log/host.access.log {"@timestamp":"2016-06-27T05:28:47-04:00",'"host":"192.168.130.223",'' "clientip":"192.168.120.222",''"size":15,''"responsetime":0.000,''"upstreamtime":"-",' '"upstreamhost":"-",''"http_host":"192.168.130.223",''"url":"/index.html",''"domain": "192.168.130.223",''"xff":"-",''"referer":"-",''"status":"200"}' 2、安装tomcat并将日志转换为json [root@logstash1~]#tarxfapache-tomcat-8.0.36.tar.gz-C/usr/local [root@logstash1~]#cd/usr/local [root@logstash1local]#ln-svapache-tomcat-8.0.36/tomcat [root@logstash1~]#vim/usr/local/tomcat/conf/server.xml <Contestpath=""docBase="/web"/> <ValveclassName="org.apache.catalina.valves.AccessLogValve"directory="logs" prefix="localhost_access_log"suffix=".txt" pattern="{&quot;clientip&quot;:&quot;%h&quot;,&quot;ClientUser&quot; :&quot;%l&quot;,&quot;authenticated&quot;:&quot;%u&quot;,&quot; AccessTime&quot;:&quot;%t&quot;,&quot;method&quot;:&quot; %r&quot;,&quot;status&quot;:&quot;%s&quot;,&quot;SendBytes&quot; :&quot;%b&quot;,&quot;Query?string&quot;:&quot;%q&quot;,&quot;partner &quot;:&quot;%{Referer}i&quot;, &quot;AgentVersion&quot;:&quot;%{User-Agent}i&quot;}"/> #启动服务验证日志 [root@logstash1~]#/usr/local/tomcat/bin/startup.sh [root@logstash1~]#tail/usr/local/tomcat/logs/localhost_access_log.2016-06-28.txt {"clientip":"192.168.120.8","ClientUser":"-","authenticated":"-","AccessTime": "[28/Jun/2016:23:31:31-0400]","method":"GET/bg-button.pngHTTP/1.1","status" :"200","SendBytes":"713","Query?string":"","partner":"http://192.168.130.223:8080/tomcat.css", "AgentVersion":"Mozilla/5.0(WindowsNT6.1;WOW64;rv:47.0)Gecko/20100101Firefox/47.0"} 3、web安装filebeat并配置filebeat收集nginx和tomcat日志发送给logstash #官方文档https://www.elastic.co/guide/en/beats/filebeat/current/index.html #下载地址https://www.elastic.co/downloads/beats/filebeat #安装[root@logstash1~]#yum-yinstallfilebeat #作用:在web端实时收集日志并传递给Logstash #为什么不用logstash在web端收集? 依赖java环境,一旦java出问题,可能会影响到web服务 系统资源占用率高 配置比较复杂,支持匹配过滤 Filebeat挺好的,专注日志手机,语法简单 ##配置filebeat从两个文件收集日志传给Logstash filebeat: prospectors: - paths: -/var/log/messages#收集系统日志 input_type:log document_type:nginx1-system-message - paths: -/var/log/nginx/log/host.access.log#nginx访问日志 input_type:log document_type:nginx1-nginx-log - paths: -/usr/local/tomcat/logs/localhost_access_log.*.txt#tomcat访问日志 input_type:log document_type:nginx1-tomcat-log #registry_file:/var/lib/filebeat/registry#这一条不知道怎么回事,出错了 output: logstash:#将收集到的文件输出到Logstash hosts:["192.168.130.223:5044"] path:"/tmp" filename:filebeat.txt shipper: logging: to_files:true files: path:/tmp/mybeat #配置logstash从filebeat接受nginx日志 [root@logstash1~]#vim/etc/logstash/conf.d/nginx-to-redis.conf input{ beats{ port=>5044 codec=>"json"#编码格式为json } } output{ if[type]=="nginx1-system-message"{ redis{ data_type=>"list" key=>"nginx1-system-message"#写入到redis的key名称 host=>"192.168.130.225"#redis服务器地址 port=>"6379" db=>"0" } } if[type]=="nginx1-nginx-log"{ redis{ data_type=>"list" key=>"nginx1-nginx-log" host=>"192.168.130.225" port=>"6379" db=>"0" } } if[type]=="nginx1-tomcat-log"{ redis{ data_type=>"list" key=>"nginx1-tomcat-log" host=>"192.168.130.225" port=>"6379" db=>"0" } } file{ path=>"/tmp/nginx-%{+yyyy-MM-dd}messages.gz"#测试日志输出 } } #这块必须注意符号的问题,符号如果不对,有可能发生错误 #启动Logstash和filebeat [root@logstash1~]#/etc/init.d/logstashstart [root@logstash1~]#netstat-tnlp|grep5044#查看是否正常运行 tcp600:::5044:::*LISTEN18255/java [root@logstash1~]#/etc/init.d/filebeatstart #查看本地输出日志 [root@logstash1~]#tail/tmp/nginx-2016-06-29messages.gz {"message":"Jun2901:40:04logstash1systemd:Unitfilebeat.serviceenteredfailedstate.", "tags":["_jsonparsefailure","beats_input_codec_json_applied"],"@version":"1","@timestamp": "2016-06-29T05:50:54.697Z","offset":323938,"type":"nginx1-system-message","input_type":"log", "source":"/var/log/messages","count":1,"fields":null,"beat":{"hostname":"logstash1.bjwf.com", "name":"logstash1.bjwf.com"},"host":"logstash1.bjwf.com"} 4、安装配置redis [root@redis~]#yum-yinstallredis [root@redis~]#vim/etc/redis.conf bind0.0.0.0#监听本机所有地址 daemonizeyes#在后台运行 appendonlyyes#开启aof [root@redis~]#systemctlstartredis.service #这里需要访问nginx和tomcat生成一些日志 [root@redis~]#netstat-tnlp|grep6379 tcp000.0.0.0:63790.0.0.0:*LISTEN17630/redis-server #连接redis查看生成的日志是否存在 [root@redis~]#redis-cli-h192.168.130.225 192.168.130.225:6379>KEYS* 1)"nginx1-tomcat-log" 2)"nginx1-system-message" 3)"nginx1-nginx-log" 5、在另外一台logstash上收集nginx的日志 [root@logstash2~]#yum-yinstalllogstash [root@logstash2~]#vim/etc/logstash/conf.d/redis-to-elast.conf input{ redis{ host=>"192.168.130.225" port=>"6379" db=>"0" key=>"nginx1-system-message" data_type=>"list" codec=>"json" } redis{ host=>"192.168.130.225" port=>"6379" db=>"0" key=>"nginx1-nginx-log" data_type=>"list" codec=>"json" } redis{ host=>"192.168.130.225" port=>"6379" db=>"0" key=>"nginx1-tomcat-log" data_type=>"list" codec=>"json" } } filter{ if[type]=="nginx1-nginx-log"or[type]=="nginx1-tomcat-log"{ geoip{ source=>"clientip" target=>"geoip" #database=>"/etc/logstash/GeoLiteCity.dat" add_field=>["[geoip][coordinaters]","%{[geoip][longitude]}"] add_field=>["[geoip][coordinaters]","%{[geoip][latitude]}"] } mutate{ convert=>["geoip][coordinates]","float"] } } } output{ if[type]=="nginx1-system-message"{ elasticsearch{ hosts=>["192.168.130.221:9200","192.168.130.222:9200"] index=>"nginx1-system-message-%{+yyyy.MM.dd}" manage_template=>true fulsh_size=>2000 idle_flush_time=>10} } if[type]=="nginx1-nginx-log"{ elasticsearch{ hosts=>["192.168.130.221:9200","192.168.130.222:9200"] index=>"logstash1-nginx1-nginx-log-%{+yyyy.MM.dd}" manage_template=>true fulsh_size=>2000 idle_flush_time=>10} } if[type]=="nginx1-tomcat-log"{ elasticsearch{ hosts=>["192.168.130.221:9200","192.168.130.222:9200"] index=>"logstash-nginx1-tomcat-log-%{+yyyy.MM.dd}" manage_template=>true fulsh_size=>2000 idle_flush_time=>10} } file{ path=>"/tmp/log-%{+yyyy-MM-dd}messages.gz" gzip=>"true" } } [root@logstash2~]#/etc/init.d/logstashconfigtest ConfigurationOK [root@logstash2~]#/etc/init.d/logstashstart #验证数据写入 #Elasticsearch的数据目录,可以确定已经写入 [root@es10]#du-sh/elk/data/linux-ES/nodes/0/indices/* 148K /elk/data/linux-ES/nodes/0/indices/logstash1-nginx1-nginx-log-2016.06.29 180K /elk/data/linux-ES/nodes/0/indices/logstash-nginx1-tomcat-log-2016.06.29 208K /elk/data/linux-ES/nodes/0/indices/nginx1-system-message-2016.06.29 576K /elk/data/linux-ES/nodes/0/indices/system-messages-2016.06.28 580K /elk/data/linux-ES/nodes/0/indices/system-messages-2016.06.29 108K /elk/data/linux-ES/nodes/0/indices/test 配置nginx进行反向代理 [root@nginx~]#vim/etc/nginx/nginx.conf upstreamkibana{#定义后端主机组 server192.168.130.221:5601weight=1max_fails=2fail_timeout=2; server192.168.130.221:5602weight=1max_fails=2fail_timeout=2; } server{ listen80; server_name192.168.130.226; location/{#定义反向代理,将访问自己的请求,都转发到kibana服务器 proxy_passhttp://kibana/; indexindex.htmlindex.htm; } } [root@nginx~]#systemctlstartnginx.service#启动服务 #查看Elasticsearch和Kibana输出结果 #到这里基本上结束了。以后在补充

优秀的个人博客,低调大师

Springboot企业级部署解决方案

使用springboot的童鞋们,有没曾经想把项目打包成 bin/conf/libs/logs 等这样的结构然后直接运行的,但是找了很多办法都不够完美(因为G是个完美主义 ) 好了直接来看解决方案: 1、修改执行打包的子工程的pom.xml文件(加入两个插件): <build> <finalName>app</finalName> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>script/**</exclude> </excludes> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.1</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.6</version> <configuration> <source>${java.version}</source> <target>${java.version}</target> <skip>true</skip> <archive> <manifest> <mainClass>com.xxx.bbb.MyMainClass</mainClass> <addClasspath>true</addClasspath> </manifest> <manifestEntries> <Class-Path>./</Class-Path> <Built-By>Wangl.sir</Built-By> <Built-Mail-By>983708408@qq.com</Built-Mail-By> <Bundle-Name>Project Description</Bundle-Name> <Implementation-Vendor></Implementation-Vendor> <Implementation-URL>http://www.xxx.com/wiki</Implementation-URL> </manifestEntries> </archive> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <finalName>app-${project.version}-bin</finalName> <!-- not append assembly id in release file name --> <appendAssemblyId>false</appendAssemblyId> <descriptors> <descriptor>src/main/assemble/package.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build> 2、新增assemble配置文件(保存至src/main/assemble/package.xml): <assembly xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/assembly-1.0.0.xsd"> <id>jar-with-dependencies</id> <formats> <format>zip</format> </formats> <includeBaseDirectory>true</includeBaseDirectory> <fileSets> <fileSet> <!-- src/main/resources/script目录保存的如:app_ctrl.sh、app_start.sh、app_stop.sh等脚本,maven-assemble会将此目录下的.sh文件复制到最后生成的bin目录下 --> <directory>src/main/resources/script</directory> <outputDirectory>bin</outputDirectory> <includes> <include>*.*</include> </includes> </fileSet> <fileSet> <directory>src/main/resources</directory> <outputDirectory>conf</outputDirectory> <includes> <include>*.*</include> </includes> </fileSet> <fileSet> <directory>target</directory> <outputDirectory>libs</outputDirectory> <includes> <include>*.jar</include> </includes> </fileSet> <fileSet> <directory>src/main/resources</directory> <outputDirectory>logs</outputDirectory> <excludes> <exclude>*.*</exclude> <exclude>script/**</exclude> </excludes> </fileSet> </fileSets> <dependencySets> <dependencySet> <outputDirectory>libs</outputDirectory> <scope>runtime</scope> <excludes> <exclude>${groupId}:${artifactId}</exclude> </excludes> </dependencySet> </dependencySets> </assembly> 3、最后就只需执行 mvn clean install -DskipTests 等待maven执行完成,在target目录下会出现app-{project.version}-bin.zip

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册