首页 文章 精选 留言 我的

精选列表

搜索[指标分析],共10000篇文章
优秀的个人博客,低调大师

专项:Android 内存泄露实践分析

定义 内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。内存泄漏形象的比喻是“操作系统可提供给所有进程的存储空间正在被某个进程榨干”,最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。所以“内存泄漏”是从操作系统的角度来看的。这里的存储空间并不是指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于磁盘交换区设定的大小。由程序申请的一块内存,如果没有任何一个指针指向它,那么这块内存就泄漏了。 ——来自《百度百科》 影响 导致OOM 糟糕的用户体验 鸡肋的App存活率 成效 内存泄露是一个持续的过程,随着版本的迭代,效果越明显 由于某些原因无法改善的泄露(如框架限制),则尽量降

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

Terraform中DataSource的深度分析

一、DataSource功能介绍 DataSource是Terraform官方提供的插件功能,各个Provider可以实现自己的DataSource能力,目的是通过DataSource中的定义过滤需要的数据,一是简化模板编写时数据过滤的复杂性,二是各个资源对Data源的引用保持一致,比如想要知道“华北2”下CPU为1核,内存为1G的ECS实例类型是什么,就可以用DataSource,如果想引用这个数据源,就可以这样使用"${data.alicloud_instance_types.1c1g.instance_types.0.id}"。 二、阿里云DataSource的功能增强 阿里云的DataSource在Terraform原生的功能上做了增强: 不仅可以作为资源引用过滤使用,还支持导出过滤结果; 并且在"plan"时就可以看到文件(原生的

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

中国云计算市场现状分析

2015年,应该说云计算市场经历了喜忧参半的一年,喜的是,云计算的市场持续爆发式增长,云计算的市场已经从互联网行业逐渐向传统行业和企业级市场渗透和转化,越来越多的企业开始尝试和接纳云计算;忧的是我们也看到一些云计算的创业公司倒下了,这说明这个市场竞争在日趋白热化。 无论是公有云、私有云还是混合云市场,已经硝烟弥漫,刀光剑影了。所以大家都在说2016年是云计算最关键的一年,“关键“这个词用的很有水平,一语双关,即说明这个市场竞争更加激烈,也表达了市场爆发增长的机遇。 从公有云的市场格局来看,AWS和阿里云在国外、国内一家独大的局面,基本已经形成,这里跟资源投入和先发优势密不可分。当然谁是第二,这个话题比较敏感,就不在这里讨论了,这里想讨论的还是偏技术层面的事情。很多人说公有云其实是种运营模式的业态,那么也就是说拼的是平台运营服务的能力,拼的是成本与投入。 这话没错,不过从长期的角度来考虑,我认为拼的还是技术,对于公有云来说,凭借基础资源,如果想要获取很好的利润实现盈利,个人觉得不现实;真正公有云的赢利点,还是来自于PaaS层,甚至是SaaS层的服务,这点从AWS的发展轨迹,可见一斑。 IaaS层的技术竞争力,在现有的技术格局下,个人认为很难有绝对的优势,虽然每家都在强调自己的网络能力、存储能力,也确实存在一些差异,但个人认为不是纯技术上的差异,很多事运营理念上的差异;真正能够体现技术差异的更多是在PaaS层的服务,比如RDB、No-SQL、缓存、队列、负载均衡、安全等等。服务于单个用户,这些技术都不是问题,在互联网公司,这些都有很好的实践和技术积累,但是在云平台上以服务形式展现,可就真的是考验技术实力了。 我们有一个金融客户,在尝试了国内若干家云平台的RDB服务之后,最终还是选择了跟国内一家专注于RDB技术的传统技术提供商合作,自己搭建了RDB服务。道理很简单,你达不到我的技术要求,在技术的领域是忽悠不了的。行就是行,不行就是不行。 因此个人认为,在公有云这个领域,未必AWS、阿里云就不可超越。而这种超越,个人觉得不是什么弯道超车,而是真真实实需要在技术上超越。这当然很难,因为AWS也好,阿里云也好,都聚集了一帮优秀的人,他们也在持续的投入和进化。但是不是没有机会,没有可能。我不是纯技术控,但是我还是坚定的认为,云计算的领域还是技术主导。 再说说私有云或者混合云市场吧,某种程度上说,公有云和私有云要解决的问题完全不同,公有云要解决的是IT资源池化、服务化的问题;但是私有云、混合云其实要解决的企业IT架构升级以及混合IT架构管理的问题,所谓升级,就是说不管什么云,首先要能解决我在传统IT架构下的问题。 如何做到企业IT架构的安全、合规、稳定、可控。我们经常看到企业的IT管理者跟云服务商的售前完全不在一个频道上。根本原因我觉得是,你没有想清楚企业究竟要解决什么问题。 综合这些年跟企业客户接触的体会,总结了一些企业用户需要解决的现实需求,可能也不全面,但是希望能够抛砖引玉,换个思维角度看问题: 1)混合IT架构管理的问题 对于稍微有点IT规模的企业来说,把传统IT架构直接完全迁移到云平台,几乎是现阶段不可能完成的任务。那么混合IT架构管理的需求就成为企业首先要考虑的问题,云是增加了企业IT资源的弹性和使用效率,但是同样增加了运维的成本,如果多套体系同时并存,势必增加企业IT的管理成本,那么如果云平台能够解决传统IT架构和云混合管理的问题,将物理的硬件、虚拟化的平台以及云平台(公有云、私有云)进行统一管理,将会很好的帮助企业解决这个门槛。 2)以业务为逻辑运维的问题 更多的云平台还是定位于资源平台,以资源为管理单位,但是对于企业用户来说,更多需要从业务逻辑进行运维和资源管理;传统企业内部也是以项目和应用为单位管理的,并且根据业务特点,规划不同的网络。比如企业内部办公网络,主要承担企业OA、CRM、财务系统、业务系统等服务;外部服务网络,承载企业的互联网应用和服务的项目。作为企业IT的管理者,他们更希望看到以业务为逻辑的资源组织视图和计量模式,同时以业务作为运维的入口。这是跟很多企业在沟通过程中,大家都谈到的一个问题。 3)应用快速交付的能力 注意这里说的是“应用”快速交付,不是资源快速交付,换句话说,也就是持续集成,持续交付的能力。这也是很多企业愿意采用云计算的核心驱动力之一,但现实中,大多数云平台只能做到资源的快速交付,并不能支持企业做到应用的快速交付 4)云平台的自动化运维和自学习的能力 这也是企业用户提到比较多的一个点,企业的IT力量来运维一个云平台,尤其是开源云平台来说,是非常有挑战的,如果云平台自身不具备很强大自动化运维的能力以及故障自动修复和自学习的能力,对于企业来说上云的成本和风险是非常高的,这也是企业关心的一个方面。 5)混合云存储的问题 目前典型的存储解决方案,还是集中式商业存储和分布式云存储,对于企业来说,数据安全是企业非常关注的部分,这也是很多企业用户愿意在私有云方案中依然使用集中式存储的原因。但是有企业也表达了对于混合云存储的需求,就是说在集中式存储和分布式云存储之间构建一个虚拟存储调度层,通过存储的技术手段,自动根据数据的重要性以及使用频率进行调度,甚至进行备份和同步。做到数据灵活的在本地和云端进行迁移、备份。灵活的掌控数据。 6)最后要说网络虚拟化和安全的问题 很多时候无论是传统的虚拟化网络架构,还是SDN的网络架构,往往方案在网络边界上(南北向流量)的保护和安全做的还可以,但是在东西向流量的安全控制方面往往是一个薄弱环节,通常通过QoS的方式来做限制,但是缺乏一个透明的监控系统和控制系统,做不到云内部网络的监控和管理。这也是我们经常看见一些虚机被攻破之后变为内部攻击源,造成云环境内部流量攻击,导致服务瘫痪。这些都是企业级用户非常重视也是比较担心的问题。 所以,归根结底,企业级私有云或者混合云市场,个人认为最核心的问题还是各家的云服务解决方案是否能够真正帮助企业解决这些现实的诉求,问题不是你有什么,问题是客户真正需要的东西是什么。可能有失偏颇,也未尽全面,仅为大家提供一个思路吧。 本文转自d1net(转载)

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

ELK日志分析系统的搭建

一、环境准备 1.安装java环境: yuminstalljava-1.8.0-openjdk*-y 2.添加elk执行用户: groupadd-g77elk useradd-u77-gelk-d/home/elk-s/bin/bashelk 3.在/etc/security/limits.conf追加以下内容: elksoftmemlockunlimited elkhardmemlockunlimited *softnofile65536 *hardnofile131072 4.执行生效 sysctl-p 5.配置主机名 hostnamectlset-hostnamemonitor-elk echo"10.135.3.135monitor-elk">>/etc/hosts 二、服务部署 1.服务端: 1)下载ELK相关的源码包: wget"https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.tar.gz" wget"https://artifacts.elastic.co/downloads/logstash/logstash-5.2.2.tar.gz" wget"https://artifacts.elastic.co/downloads/kibana/kibana-5.2.2-linux-x86_64.tar.gz" wget"http://mirror.bit.edu.cn/apache/kafka/0.10.2.0/kafka_2.12-0.10.2.0.tgz" wget"http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz" 2)创建elk目录,并将以上源码包解压至该目录: mkdir/usr/local/elk mkdir-p/data/elasticsearch/ chown-Relk.elk/data/elasticsearch/ mkdir-p/data/{kafka,zookeeper} mvlogstash-5.2.2logstash&&mvkibana-5.2.2-linux-x86_64kibana&&mvelasticsearch-5.2.2elasticsearch&&mvfilebeat-5.2.2-linux-x86_64filebeat&&mvkafka_2.12-0.10.2.0kafka&&mvzookeeper-3.4.9zookeeper chown-Relk.elk/usr/local/elk/ 程序目录列表如下: 3)修改以下程序的相应配置文件 ①kibana: [root@monitor-elk~]#cat/usr/local/elk/kibana/config/kibana.yml|grep-v"^#\|^$" server.host:"localhost" elasticsearch.url:"http://localhost:9200" elasticsearch.requestTimeout:30000 logging.dest:/data/elk/logs/kibana.log [root@monitor-elk~]# ②elasticsearch: [root@monitor-elk~]#cat/usr/local/elk/elasticsearch/config/elasticsearch.yml|grep-v"^#\|^$" node.name:node01 path.data:/data/elasticsearch/data path.logs:/data/elk/logs/elasticsearch bootstrap.memory_lock:true network.host:127.0.0.1 http.port:9200 [root@monitor-elk~]#/usr/local/elk/elasticsearch/config/jvm.options #修改以下参数 -Xms1g -Xmx1g ③logstash: [root@monitor-elk~]#cat/usr/local/elk/logstash/config/logs.yml input{ #使用kafka的数据作为日志数据源 kafka { bootstrap_servers=>["127.0.0.1:9092"] topics=>"beats" codec=>json } } filter{ #过滤数据,如果日志数据里面包含有该IP地址,将会被丢弃 if[message]=~"123.151.4.10"{ drop{} } #转码,转成正常的url编码,如中文 #urldecode{ #all_fields=>true #} #nginxaccess #通过type来判断传入的日志类型 if[type]=="hongbao-nginx-access"or[type]=="pano-nginx-access"or[type]=="logstash-nginx-access"{ grok{ #指定自定义的grok表达式路径 patterns_dir=>"./patterns" #指定自定义的正则表达式名称解析日志内容,拆分成各个字段 match=>{"message"=>"%{NGINXACCESS}"} #解析完毕后,移除默认的message字段 remove_field=>["message"] } #使用geoip库解析IP地址 geoip{ #指定解析后的字段作为数据源 source=>"clientip" fields=>["country_name","ip","region_name"] } date{ #匹配日志内容里面的时间,如05/Jun/2017:03:54:01+0800 match=>["timestamp","dd/MMM/yyyy:HH:mm:ssZ"] #将匹配到的时间赋值给@timestamp字段 target=>"@timestamp" remove_field=>["timestamp"] } } #tomcataccess if[type]=="hongbao-tomcat-access"or[type]=="ljq-tomcat-access"{ grok{ patterns_dir=>"./patterns" match=>{"message"=>"%{TOMCATACCESS}"} remove_field=>["message"] } geoip{ source=>"clientip" fields=>["country_name","ip","region_name"] } date{ match=>["timestamp","dd/MMM/yyyy:HH:mm:ssZ"] target=>"@timestamp" remove_field=>["timestamp"] } } #tomcatcatalina if[type]=="hongbao-tomcat-catalina"{ grok{ match=>{ "message"=>"^(?<log_time>\d{4}-\d{2}-\d{2}\d{2}:\d{2}:\d{2},\d{3})(?<level>\w*)(?<log_data>.+)" } remove_field=>["message"] } date{ match=>["log_time","yyyy-MM-ddHH:mm:ss,SSS"] target=>"@timestamp" remove_field=>["log_time"] } } } output{ #将解析失败的记录写入到指定的文件中 if"_grokparsefailure"in[tags]{ file{ path=>"/data/elk/logs/grokparsefailure-%{[type]}-%{+YYYY.MM}.log" } } #nginxaccess #根据type日志类型分别输出到elasticsearch不同的索引 if[type]=="hongbao-nginx-access"{ #将处理后的结果输出到elasticsearch elasticsearch{ hosts=>["127.0.0.1:9200"] #指定输出到当天的索引 index=>"hongbao-nginx-access-%{+YYYY.MM.dd}" } } if[type]=="pano-nginx-access"{ elasticsearch{ hosts=>["127.0.0.1:9200"] index=>"pano-nginx-access-%{+YYYY.MM.dd}" } } if[type]=="logstash-nginx-access"{ elasticsearch{ hosts=>["127.0.0.1:9200"] index=>"logstash-nginx-access-%{+YYYY.MM.dd}" } } #tomcataccess if[type]=="hongbao-tomcat-access"{ elasticsearch{ hosts=>["127.0.0.1:9200"] index=>"hongbao-tomcat-access-%{+YYYY.MM.dd}" } } if[type]=="ljq-tomcat-access"{ elasticsearch{ hosts=>["127.0.0.1:9200"] index=>"ljq-tomcat-access-%{+YYYY.MM.dd}" } } #tomcatcatalina if[type]=="hongbao-tomcat-catalina"{ elasticsearch{ hosts=>["127.0.0.1:9200"] index=>"hongbao-tomcat-catalina-%{+YYYY.MM.dd}" } } } [root@monitor-elk~]# 配置正则表达式 [root@monitor-elk~]#cp/usr/local/elk/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.0.2/patterns/grok-patterns/usr/local/elk/logstash/config/patterns [root@monitor-elk~]#tail-5/usr/local/elk/logstash/config/patterns #Nginx NGINXACCESS%{COMBINEDAPACHELOG}%{QS:x_forwarded_for} #Tomcat TOMCATACCESS%{COMMONAPACHELOG} [root@monitor-elk~]#chownelk.elk/usr/local/elk/logstash/config/patterns 4)配置zookeeper: cp/usr/local/elk/zookeeper/conf/zoo_sample.cfg/usr/local/elk/zookeeper/conf/zoo.cfg 修改配置文件中的数据存储路径 vim/usr/local/elk/zookeeper/conf/zoo.cfg dataDir=/data/zookeeper 备份并修改脚本/usr/local/elk/zookeeper/bin/zkEnv.sh 修改以下变量的参数 ZOO_LOG_DIR="/data/zookeeper-logs" ZOO_LOG4J_PROP="INFO,ROLLINGFILE" 备份并修改日志配置/usr/local/elk/zookeeper/conf/log4j.properties 修改以下变量的参数 zookeeper.root.logger=INFO,ROLLINGFILE log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender#每天轮转日志 启动zookeeper: /usr/local/elk/zookeeper/bin/zkServer.shstart 5)配置kafka: 修改配置文件/usr/local/elk/kafka/config/server.properties的以下参数 log.dirs=/data/kafka zookeeper.connect=localhost:2181 备份并修改脚本/usr/local/elk/kafka/bin/kafka-run-class.sh 在“base_dir=$(dirname$0)/..”的下一行追加LOG_DIR变量,并指定日志输出路径 LOG_DIR=/data/kafka-logs 创建日志存储目录: mkdir-p/data/kafka-logs mkdir-p/data/elk/logs chown-Relk.elk/data/elk/logs 启动kafka: nohup/usr/local/elk/kafka/bin/kafka-server-start.sh/usr/local/elk/kafka/config/server.properties&>>/data/elk/logs/kafka.log& 需要注意的是主机名一定要有配置在/etc/hosts文件中,否则kafka会无法启动 [root@monitor-elk~]#cat/etc/hosts 127.0.0.1localhostlocalhost.localdomain ::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain6 10.135.3.135monitor-elk 6)配置supervisor ①安装supervisor: yuminstallsupervisor-y 设置服务开机自启动(server程序也会一起启动): systemctlenablesupervisord.service ②修改配置 a.创建日志存储路径: mkdir-p/data/supervisor chown-Relk.elk/data/supervisor/ b.修改主配置文件/etc/supervisord.conf logfile=/data/supervisor/supervisord.log c.创建elk程序对应的supervisor配置文件,并添加以下配置内容: [root@monitor-elk~]#cat/etc/supervisord.d/elk.ini [program:elasticsearch] directory=/usr/local/elk/elasticsearch command=su-c"/usr/local/elk/elasticsearch/bin/elasticsearch"elk autostart=true startsecs=5 autorestart=true startretries=3 priority=10 [program:logstash] directory=/usr/local/elk/logstash command=/usr/local/elk/logstash/bin/logstash-f/usr/local/elk/logstash/config/logs.yml user=elk autostart=true startsecs=5 autorestart=true startretries=3 redirect_stderr=true stdout_logfile=/data/elk/logs/logstash.log stdout_logfile_maxbytes=1024MB stdout_logfile_backups=10 priority=11 [program:kibana] directory=/usr/local/elk/kibana command=/usr/local/elk/kibana/bin/kibana user=elk autostart=true startsecs=5 autorestart=true startretries=3 priority=12 [root@monitor-elk~]# ③启动supervisor: systemctlstartsupervisord 查看程序进程和日志: psaux|grep-vgrep|grep"elasticsearch\|logstash\|kibana" tip: 重启配置的单个程序,如: supervisorctlrestartlogstash 重启配置的所有程序: supervisorctlrestartall 重载配置(只重启配置变动的对应程序,其他配置未变动的程序不重启): supervisorctlupdate 7)配置nginx ①安装nginx yuminstallnginx-y ②配置nginx代理: [root@monitor-elk~]#cat/etc/nginx/conf.d/kibana.conf upstreamkibana{ server127.0.0.1:5601max_fails=3fail_timeout=30s; } server{ listen8080; server_namelocalhost; location/{ proxy_passhttp://kibana/; indexindex.htmlindex.htm; #auth auth_basic"kibanaPrivate"; auth_basic_user_file/etc/nginx/.htpasswd; } } [root@monitor-elk~]#greplisten/etc/nginx/nginx.conf listen8000default_server; listen[::]:8000default_server; [root@monitor-elk~]# ③创建nginx认证: [root@monitor-elk~]#yuminstallhttpd-y [root@monitor-elk~]#htpasswd-cm/etc/nginx/.htpasswdelk Newpassword: Re-typenewpassword: Addingpasswordforuserelk [root@monitor-elk~]#systemctlstartnginx [root@monitor-elk~]#systemctlenablenginx 8)配置ik中文分词: ①安装maven: wget"http://mirror.bit.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz" tar-zxfapache-maven-3.3.9-bin.tar.gz mvapache-maven-3.3.9/usr/local/maven echo"exportMAVEN_HOME=/usr/local/maven">>/etc/bashrc echo"exportPATH=$PATH:$MAVEN_HOME/bin">>/etc/bashrc ./etc/bashrc ②编译安装ik(注意下载对应版本): wget"https://github.com/medcl/elasticsearch-analysis-ik/archive/v5.2.2.zip" unzipv5.2.2.zip cdelasticsearch-analysis-ik-5.2.2/ mvnpackage mkdir/usr/local/elk/elasticsearch/plugins/ik cptarget/releases/elasticsearch-analysis-ik-5.2.2.zip/usr/local/elk/elasticsearch/plugins/ik/ cd/usr/local/elk/elasticsearch/plugins/ik/ unzipelasticsearch-analysis-ik-5.2.2.zip rm-felasticsearch-analysis-ik-5.2.2.zip chown-Relk.elk../ik supervisorctlrestartelasticsearch ③创建索引模板: 要使用ik分词,需要在创建指定的索引前(不管是通过命令手动还是logstash配置来创建)先创建索引模板,否则使用默认的模板即可: cd/usr/local/elk/logstash 创建并编辑文件logstash.json,添加以下内容: { "order":1, "template":"tomcatcat-*", "settings":{ "index":{ "refresh_interval":"5s" } }, "mappings":{ "_default_":{ "dynamic_templates":[ { "string_fields":{ "mapping":{ "norms":false, "type":"text", "analyzer":"ik_max_word", "search_analyzer":"ik_max_word" }, "match_mapping_type":"text", "match":"*" } } ], "_all":{ "norms":false, "enabled":true }, "properties":{ "@timestamp":{ "include_in_all":false, "type":"date" }, "log_data":{ "include_in_all":true, "type":"text", "analyzer":"ik_max_word", "search_analyzer":"ik_max_word", "boost":8 }, "@version":{ "include_in_all":false, "type":"keyword" } } } }, "aliases":{} }' 添加完毕后,执行curl命令创建索引模板 curl-XPUT'http://localhost:9200/_template/tomcatcat'-d@logstash.json 执行成功后会返回结果{"acknowledged":true} ④热更新配置: 有些词语ik无法识别分词,如公司名称、服务名称之类 curl-XGET'http://localhost:9200/_analyze?pretty&analyzer=ik_smart'-d' 腾讯云' 这时需要自己自定义词库,ik支持分词热更新的方式(不需要重启elasticsearch),每分钟自动检测一次 在nginx根路径下创建一个utf8格式的文本文件ik.txt,将自己需要分词的词语写入ik.txt,一行一词: 然后修改/usr/local/elk/elasticsearch/plugins/ik/config/IKAnalyzer.cfg.xml <!--用户可以在这里配置远程扩展字典--> <entrykey="remote_ext_dict">http://127.0.0.1:8000/ik.txt</entry> 配置完毕重启elasticsearch,再次获取分词结果: 2.客户端: 1)下载filebeat: wget"https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.2.2-linux-x86_64.tar.gz" 解压filebeat-5.2.2-linux-x86_64.tar.gz至/usr/local/elk/目录,并重命名为filebeat mkdir/usr/local/elk/ mkdir-p/data/elk/logs/ echo"10.135.3.135elk">>/etc/hosts 2)配置filebeat: [root@test2filebeat]#catlogs.yml filebeat.prospectors: - #指定需要监控的日志文件路径,可以使用*匹配 paths: -/data/nginx/log/*_access.log #指定文件的输入类型为log(默认) input_type:log #设定日志类型 document_type:pano-nginx-access #从文件的末尾开始监控文件新增的内容,并按行依次发送 tail_files:true #将日志内容输出到kafka output.kafka: hosts:["10.135.3.135:9092"] topic:beats compression:Snappy [root@test2filebeat]# [root@test3filebeat]#catlogs.yml filebeat.prospectors: - paths: -/usr/local/tomcat/logs/*access_log.*.txt input_type:log document_type:hongbao-tomcat-access tail_files:true - paths: -/usr/local/tomcat/logs/catalina.out input_type:log document_type:hongbao-tomcat-catalina #多行匹配模式,后接正则表达式,这里表示匹配时间,如2017-06-0510:00:00,713 multiline.pattern:'^\d{4}-\d{2}-\d{2}\d{2}:\d{2}:\d{2},\d{3}' #将未匹配到的行合并到上一行,如java的错误日志 multiline.negate:true #将未匹配到的行添加到上一行的末尾 multiline.match:after tail_files:true output.kafka: hosts:["10.135.3.135:9092"] topic:beats compression:Snappy [root@test3filebeat]# 3)启动filebeat nohup/usr/local/elk/filebeat/filebeat-e-c/usr/local/elk/filebeat/logs.yml-d"publish"&>>/data/elk/logs/filebeat.log& 三、kibanaweb端配置 1.浏览器访问kibana地址,并输入前面nginx设置的账号密码: http://10.135.3.135:8080 在访问Kibana时,默认情况下将加载Discover(发现)页面,并选择默认的索引模式(logstash-*)。timefilter(时间过滤器)默认设置为last15minutes(最近15分钟),搜索查询默认设置为match-all(*)。 服务器资源状态页: http://10.135.3.135:8080/status 2.建立索引模式 注意,索引模式的名称要和logstash的output生成的索引(也就是说必须存在于Elasticsearch中,而且必须包含有数据)进行匹配,如logstash-*可与logstash-20170330匹配,还可以匹配多个索引(所有以logstash-开头的索引)。 *匹配索引名称中的零个或多个字符 3.索引建立完毕后,点击Discover中的索引模式,即可看到Elasticsearch的日志数据 4.创建可视化图表 绘制可视化图表,将拆分出来的nginx或tomcat访问日志中的字段response状态码进行聚合显示,以图表的形式直观显示各状态码(如200、400等)的统计情况 1)点击 Visualize 中 Vertical Bar Charts(垂直条形图) 2)选择其中一个索引模式,如 pano-* 3)通过字段 response.keyword 指定terms(词条)聚合,按从大到小的顺序来显示前五列状态码的总数数据,然后点击 Apply changes 图标生效。 图表中,X轴显示的是状态码,Y轴显示的是对应的状态码总数。 4)最后点击右上角的 Save 保存,同时输入一个可视化的名称。 5.创建仪表盘 可以将相同业务或类型的可视化对象,集中显示在同一个仪表盘中。 1)点击 add 添加可视化对象到仪表盘, 2)点击创建好的可视化对象,将会排列在在仪表盘的窗口中。对其可视化对象的窗口大小进行合适的调整。 3)添加和调整完毕后,点击右上角的 Save 保存,同时输入一个仪表盘的名称。 4)显示的结果 四、服务监控脚本 1.服务端 1)kafka [root@monitor-elk~]#cat/usr/local/scripts/monitor_kafka.sh #!/bin/bash # ############################################# #author:Ellen #describes:Checkkafkaprogram #version:v1.0 #updated:20170407 ############################################# # #Configurationinformation program_dir=/usr/local/elk/kafka logfile=/usr/local/scripts/log/monitor_kafka.log #Checkexecuteduser if[`whoami`!="root"];then echo"Pleaseuserootrunscript!!!" exit1 fi #Checkkafkaprogram num=`psaux|grep-w$program_dir|grep-vw"grep\|vim\|vi\|mv\|scp\|cat\|dd\|tail\|head\|script\|ls\|echo\|sys_log\|logger\|tar\|rsync\|ssh"|wc-l` if[${num}-eq0];then echo"[`date+'%F%T'`][CRITICAL]Kafkaprogramdostnotstart!!!"|tee-a$logfile #Sendalarminformation #cagent_tools是腾讯云服务器自带的报警插件,该插件可发送短信或邮箱告警,如不需要可注释 /usr/bin/cagent_toolsalarm"Kafkaprogramdostnotstart!!!" echo"[`date+'%F%T'`][INFO]Beginstartkafkaprogram..."|tee-a$logfile nohup/usr/local/elk/kafka/bin/kafka-server-start.sh/usr/local/elk/kafka/config/server.properties&>>/data/elk/logs/kafka.log& if[$?-eq0];then echo"[`date+'%F%T'`][INFO]Kafkaprogramstartsuccessful."|tee-a$logfile /usr/bin/cagent_toolsalarm"Kafkaprogramstartsuccessful" exit0 else echo"[`date+'%F%T'`][CRITICAL]Kafkaprogramstartfailed!!!"|tee-a$logfile /usr/bin/cagent_toolsalarm"Kafkaprogramstartfailed!!!Pleasehandleit!!!" exit6 fi else echo"[`date+'%F%T'`][INFO]Kafkaprogramisrunning..."|tee-a$logfile exit0 fi [root@monitor-elk~]# 2)zookeeper [root@monitor-elk~]#cat/usr/local/scripts/monitor_zookeeper.sh #!/bin/bash # ############################################# #author:Ellen #describes:Checkzookeeperprogram #version:v1.0 #updated:20170407 ############################################# # #Configurationinformation program_dir=/usr/local/elk/zookeeper logfile=/usr/local/scripts/log/monitor_zookeeper.log #Checkexecuteduser if[`whoami`!="root"];then echo"Pleaseuserootrunscript!!!" exit1 fi #Checkzookeeperprogram num=`psaux|grep-w$program_dir|grep-vw"grep\|vim\|vi\|mv\|scp\|cat\|dd\|tail\|head\|ls\|echo\|sys_log\|tar\|rsync\|ssh"|wc-l` if[${num}-eq0];then echo"[`date+'%F%T'`][CRITICAL]Zookeeperprogramdostnotstart!!!"|tee-a$logfile #Sendalarminformation /usr/bin/cagent_toolsalarm"Zookeeperprogramdostnotstart!!!" echo"[`date+'%F%T'`][INFO]Beginstartzookeeperprogram..."|tee-a$logfile /usr/local/elk/zookeeper/bin/zkServer.shstart if[$?-eq0];then echo"[`date+'%F%T'`][INFO]Zookeeperprogramstartsuccessful."|tee-a$logfile /usr/bin/cagent_toolsalarm"Zookeeperprogramstartsuccessful" exit0 else echo"[`date+'%F%T'`][CRITICAL]Zookeeperprogramstartfailed!!!"|tee-a$logfile /usr/bin/cagent_toolsalarm"Zookeeperprogramstartfailed!!!Pleasehandleit!!!" exit6 fi else echo"[`date+'%F%T'`][INFO]Zookeeperprogramisrunning..."|tee-a$logfile exit0 fi [root@monitor-elk~]# 3)添加crontab定时任务 0-59/5****/usr/local/scripts/monitor_kafka.sh&>/dev/null 0-59/5****/usr/local/scripts/monitor_zookeeper.sh&>/dev/null 2.客户端: [root@test2~]#cat/usr/local/scripts/monitor_filebeat.sh #!/bin/bash # ############################################# #author:Ellen #describes:Checkfilebeatprogram #version:v1.0 #updated:20170407 ############################################# # #Configurationinformation program_dir=/usr/local/elk/filebeat logfile=/usr/local/scripts/log/monitor_filebeat.log #Checkexecuteduser if[`whoami`!="root"];then echo"Pleaseuserootrunscript!!!" exit1 fi #Checkfilebeatprogram num=`psaux|grep-w$program_dir|grep-vw"grep\|vim\|vi\|mv\|cp\|scp\|cat\|dd\|tail\|head\|script\|ls\|echo\|sys_log\|logger\|tar\|rsync\|ssh"|wc-l` if[${num}-eq0];then echo"[`date+'%F%T'`][CRITICAL]Filebeatprogramdostnotstart!!!"|tee-a$logfile #Sendalarminformation /usr/bin/cagent_toolsalarm"Filebeatprogramdostnotstart!!!" echo"[`date+'%F%T'`][INFO]Beginstartfilebeatprogram..."|tee-a$logfile nohup/usr/local/elk/filebeat/filebeat-e-c/usr/local/elk/filebeat/logs.yml-d"publish"&>>/data/elk/logs/filebeat.log& if[$?-eq0];then echo"[`date+'%F%T'`][INFO]Filebeatprogramstartsuccessful."|tee-a$logfile /usr/bin/cagent_toolsalarm"Filebeatprogramstartsuccessful" exit0 else echo"[`date+'%F%T'`][CRITICAL]Filebeatprogramstartfailed!!!"|tee-a$logfile /usr/bin/cagent_toolsalarm"Filebeatprogramstartfailed!!!Pleasehandleit!!!" exit6 fi else echo"[`date+'%F%T'`][INFO]Filebeatprogramisrunning..."|tee-a$logfile exit0 fi [root@test2~]# 3)添加crontab定时任务 0-59/5****/usr/local/scripts/monitor_filebeat.sh&>/dev/null 五、注意事项 1.数据流向 -------------------------------------------------------------------------------------------------- log_files->filebeat->kafka->logstash->elasticsearch->kibana -------------------------------------------------------------------------------------------------- 2.每天定时清理elasticsearch索引,只保留30天内的索引 1)编写脚本 [root@monitor-elk~]#cat/usr/local/scripts/del_index.sh #!/bin/bash # ############################################# #author:Ellen #describes:Deleteelasticsearchhistoryindex. #version:v1.0 #updated:20170407 ############################################# # #Configurationinformation logfile=/usr/local/scripts/log/del_index.log tmpfile=/tmp/index.txt host=localhost port=9200 deldate=`date-d'-30days'+'%Y.%m.%d'` #Checkexecuteduser if[`whoami`!="root"];then echo"Pleaseuserootrunscript!!!" exit1 fi #Deleteelasticsearchindex curl-s"$host:$port/_cat/indices?v"|grep-vhealth|awk{'print$3'}|grep"$deldate">$tmpfile if[!-s$tmpfile];then echo"[`date+'%F%T'`][WARNING]$tmpfileisaemptyfile."|tee-a$logfile exit1 fi foriin`cat/tmp/index.txt` do curl-XDELETEhttp://$host:$port/$i if[$?-eq0];then echo"[`date+'%F%T'`][INFO]Elasticsearchindex$ideletesuccessful."|tee-a$logfile else echo"[`date+'%F%T'`][CRITICAL]Elasticsearchindex$ideletefailed!!!"|tee-a$logfile /usr/bin/cagent_toolsalarm"Elasticsearchindex$ideletefailed!!!" exit6 fi done [root@monitor-elk~]# 2)添加crontab定时任务 0002***/usr/local/scripts/del_index.sh&>/dev/null 3.按业务进行建立索引 如hongbao、pano等 4.nginx和tomcat等访问日志使用默认格式 六、相关命令参考 1.列出所有索引 curl-s'http://localhost:9200/_cat/indices?v' 2.列出节点列表 curl'localhost:9200/_cat/nodes?v' 3.查询集群健康信息 curl'localhost:9200/_cat/health?v' 4.查看指定的索引数据(默认返回十条结果) curl-XGET'http://localhost:9200/logstash-nginx-access-2017.05.20/_search?pretty' 5.删除指定的索引 curl-XDELETE http://localhost:9200/logstash-nginx-access-2017.05.20 6.查询模板 curl-s'http://localhost:9200/_template'

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

MSICE界面和功能分析

一、首页 ICE实现的这种界面样式,有可能使用WCF实现的,但是MFC来模仿也是可行的。 包括配置界面,和右下角的细节。 首页的主要功能只有3个,分别为图片拼接、视频拼接和打开拼接文件。 二、输入拼接图片 首先是直接打开N多图片 注意界面上的小细节,可以先模仿(这里的界面实现的很好,如果需要可以专门花一些时间来进行学习) 右边上的图像操作非常顺滑。 看右边的小细节。 如果选择Simple pannrama的模式,那么多余的图片就会被T掉;但是如果选择自己定义图片,那么你保存在上面的图片肯定会存在,这一点是目前PipeLine没有实现的地方。 如果我们认为,Simple panorama基本上是按照PipeLine的模式来处理的。 那么,在手动选择部分(structed panorama)有以下模型 auto detect 自动选择,但是这里的自动和 Simple pannrama 也不一样; Planar motion 平面 Planar motion with skew 仿射 Planar motion with perspective 透视 Rotating motion 旋转 最前面的按钮和最后面的checkbox,那么都是用于实时显示拼接结果而来的。 这个小玩意,看上去很神奇,实际上还是有方法可以来设计的。 1 只有4个角可现实为1. 2 当某个角显示为1的时候,只有旁边的按钮可以显示为2 3 如果上次是竖着的,那么下次也是直的。很有意思。 而两边的columns和rows。它们的出现时和选择竖直还是水平有关的。 对于这块,左边是选择图片的顺序,这个效果应该说是很直观直接;右边是选择拼接的角度参数。 最下面这4个参数,在我掌握的资料里面还没有充分的介绍。 三、拼接图片 最为巨大的是中间的框子,实际上具体的工作还是中间的来做。 cylindical 圆柱形的 spherical 球状的 stereographic 立方体 transverse cylindrical 横向的圆柱形 transverse spherical 横向 球状? mercator 墨卡托投影??? orthographic 正投 transverse mercator横轴 墨卡托投影 fisheye 鱼眼 包括下半部分实现了Orientation,的确能够调整的地方很多。那么目前我们还是实现最为基础的Cylindrical,下一步可能涉及Tansverse Cylindrical和Mercator等。 四、切割图片 这块切割并不复杂,主要是auto complete实现了一个边缘提取最大矩形的工作,应该是可以完成的。 值得注意的是,ICE中用于显示比较大型图片的时候,有一个延迟读取的模式,用户体验较好,值得关注。 五、输出图片 输出图片这块,最终的Image模式是用的上的,而Photosynth是微软关于全景另一个项目,虽然目前已经关闭,但是未来可能有作用。 小结 可以看出,ICE在界面设计这块,的确是可圈可点的。但是无论是从社区,还是从一些其它的地方,都能够发现一个事实:单纯的图像拼接技术已经过时,或者至少在这个时代不是潮流了。必须和更新的硬件,和更细化的专业的接口(运用场景)结合起来,才能够有广阔的市场。所以图像处理工程师一定要有相应的视野和实现各种原型的能力。 目前方向:图像拼接融合、图像识别 联系方式:jsxyhelu@foxmail.com

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

BSP模型与实例分析(一)

一、BSP模型概念BSP(Bulk Synchronous Parallel,整体同步并行计算模型)是英国计算机科学家Viliant在上世纪80年代提出的一种并行计算模型。Google发布的一往篇论文(《Pregel: A System for Large-Scale Graph Processing》)使得这一概念被更多人所认识,据说在Google 80%的程序运行在MapReduce上,20%的程序运行在Pregel上。和MapReduce一样,Google并没有开源Pregel,Apache按Pregel的思想提供了类似框架Hama。关于BSP,按我的理解做一些解释:1.Processors指的是并行计算进程,它对应到集群中的多个结点,每个结点可以有多个Processor;2.Local Computation就是单个Processor的计算,每个Processor都会切分一些结点作计算;3.Communication指的是Processor之间的通讯。我们接触的图计算往往需要做些递归或是使用全局变量,在BSP模型中,对图结点的访问分布到了不同的Processor中,并且往往哪怕是关系紧密具有局部聚类特点的结点也未必会分布到同个Processor或同一个集群结点上,所有需要用到的数据都需要通过Processor之间的消息传递来实现同步;4.Barrier Synchronization又叫障碍同步或栅栏同步。每一次同步也是一个超步的完成和下一个超步的开始;5.Superstep超步,这是BSP的一次计算迭代,拿图的广度优先遍历来举例,从起始结点每往前步进一层对应一个超步。6.程序该什么时候结束呢?这个其实是程序自己控制,一个作业可以选出一个Proceessor作为Master,每个Processor每完成一个Superstep都向Master反馈完成情况,Master在N个Superstep之后发现所有Processor都没有计算可做了,便通知所有Processor结束并退出任务。二、Hama的BSP实现原理Apache Hama可以说是一个利用Hadoop的基础设施自己封装的一个BSP计算模型的实现,它虽然跟Hadoop有关但是不使用Hadoop集群,而是用的自己的集群。依赖ZooKeeper分布式锁作为作业的调度控制,可以用HDFS/Local/HBase等文件系统作输入输出。(一)基本结构Hama的集群由一个BSPMaster和多个互不关联的GroomServer作计算结点组成,HDFS和Zookeeper都可以是独立的集群。启动从BSPMaster开始,如果是master会启动BSPMaster、GroomServer两个进程,如果只是计算结点则只会启动GroomServer,启动/关闭脚本都是Master机器远程在GroomServer机器上执行。下面分别解释下几个基本概念:1.BSPMaster即集群的主,负责了集群各GroomServer结点的管理与作业的调度,就我所知它还存在单点的问题。相当于Hadoop的JobTracker或HDFS的NameNode;2.BSPGroomServer即计算结点,GroomServer是物理上的概念,也相当于是BSPPeer的宿主,负责了BSPPeer对外的消息通讯、机器状态报告等,相当于Hadoop的TaskTracker或HDFS的DataNode,在集群中往往和DataNode一一对应的部署(底层机制就是Hadoop的TaskTracker);3.BSPPeer即BSP中的Processor,当作业过来的时候,任务jar包和配置会被同步过来,GroomServer就启动一个独立JVM进程来执行一个BSPPeer实例,就像TaskTracker的作法一样。BSPPeer是分布式计算中的逻辑计算单元;4.BSPJobClient作业客户端,职责是将作业所需jar以及配置提交给BSPMaster5.Zookeeper分布式锁。用于实现Barrier Synchronisation机制。在ZK上,进入BSPPeer主要有进入Barrier和离开Barrier操作,所有进入Barrier的Peer会在zk上创建一个EPHEMERAL的node(/bsp/JobID/Superstep NO./TaskID),最后一个进入Barrier的Peer同时还会创建一个ready node(/bsp/JobID/Superstep NO./ready),Peer进入阻塞状态等待zk上所有task的node都删除后退出Barrier(二)输入与输出Hama的输入输出文件格式、分块、文件传输等机制都跟HDFS是一样的,也都是K-V对,派生自Writable。输入的K-V对为结点(VertexWritable)和邻接结点集合(VertexArrayWritable)。(三)消息通讯图计算涉及到大量消息传递,Hama不完全是实时传送,消息的传输发生在Peer进入同步阶段后,并且对同一个目标GroomServer的消息进行了合并,两个物理结点之间每一次超步其实只会发生一次传输(四)图算法运用Hama其实只提供了一个图计算框架,算法都是需要自己去实现的。理想的情况是图文件分块,Peer尽可载入本地文件作计算,这样即加快了图载入时间也减少了网络传输。不过事实是可能不能这样假设,为使结构尽更简单,对图的切割往往只是将结点用简单的Hash算法分布到Peer上,不能对图作任何局部聚类的假设。本文来源于"阿里中间件团队播客",原文发表时间"2012-06-08"

资源下载

更多资源
Mario

Mario

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

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册