博客 2015-04-03

常用的匹配选项:

https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns


可以在线Debug:

http://grokdebug.herokuapp.com/


用oniguruma正则表达库:

对于东亚文字支持比较好,开始是用在ruby上,也可用于C++,是日本的开发人员编写的。

http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt



内容: - 2015-04-29 13:04:23,733 [main] INFO (api.batch.ThreadPoolWorker) Command-line options for this run:
正则:- %{TIMESTAMP_ISO8601:time} \[%{WORD:main}\] %{LOGLEVEL:loglevel} \(%{JAVACLASS:class}\) %{GREEDYDATA:mydata}


结果:

{
  "time": [
    "2015-04-29 13:04:23,733"
  ],
  "main": [
    "main"
  ],
  "loglevel": [
    "INFO"
  ],
  "class": [
    "api.batch.ThreadPoolWorker"
  ],
  "mydata": [
    "Command-line options for this run:"
  ]
}




内容:/wls/applogs/rtlog/icore-pamsDRServer1351/icore-pamsDRServer1351.out
正则:/wls/applogs/rtlog/(?(?[a-zA-Z-]+)([0-9]*(?:SF)|(?:WII)|(?:DMZ)|(?:DR))([0-9a-zA-Z]+))%{UNIXPATH:filepath}


博客 2015-03-30

 需求:

       比如 path => /wls/applogs/rtlog/icore-pts2SF2433/icore-pts2SF2433.out

想提取icore-pts 与 icore-pts2SF2433/icore-pts2SF2433.out


第一种方法:用grok 处理


filter {
        grok {
                match => ["path","/wls/applogs/rtlog/(?<servername>[a-z][a-z-]*)(?<stag>[0-9]*)((?:SF)|(?:WII)|(?:DMZ)|(?:DRServer))(?:%{NUMBER})/%{USERNAME:apppath}"]
                add_field => {
                                "app_path" => "%{apppath}"
                                "app_name" => "%{servername}"
                                }
        }
}


第二种方法:用Ruby 处理

博客 2015-03-23


        上一节讲了最简单的  git web代码运程同步实例,下面逐渐增加一些常用实例。


博客 2015-03-19

        Git 仓库之间是对等的,没有主次之分。假如想把服务器端同步到本地,并把本地的修改同步到服务器端,就用下面的方法:


服务器端:

ubuntu
sudo apt-get install git

tar xzf mreald-dir.tgz
cd mreald-dir  #代码库目录

git init
git config --global user.name  mreald_name
git config --global user.email mreald_email
git add *
git commit -a -m "Hello Git"
git status

web 目录:
/var/www/html/wenblog


本地端:

git clone root@192.168.100.6:~/html/mreald-dir/
cd mreald-dir
git config --global user.name locale_name
git config --global user.email locale_email
vim test.txt (add one line cccccccc)
git add *
git commit -m "add ccc"
git config --global remote.pushdefault root@192.168.100.6:~/html/mreald-dir/
git config --global push.default matching
git push
[ 或者:git push orign master(从本地提交到服务器192.168.100.6)
             git pull orign master(从服务器同步到本地)
             git push root@192.168.100.6:~/html/mreald-dir/ ]


问题:

git failed to push

解决办法:

一,在服务器上初始化仓库的时候用git -bare init (只有版本库,没有源文件)

博客 2015-03-19


        今晚想通过Git同步代码到远程主机,输入密码后,提示:

Permission denied, please try again.

        然后,ssh root@ip 试了一下,也是同样的提示。不如正好学习下配置文件,一探究竟!


原因:sshd 的配置文件:

PermitRootLogin
             是否允许 root 登录。可用值如下:
             "yes"(默认) 表示允许。"no"表示禁止。
             "without-password"表示禁止使用密码认证登录。
             "forced-commands-only"表示只有在指定了 command 选项的情况下才允许使用公钥认证登录。
                                   同时其它认证方法全部被禁止。这个值常用于做远程备份之类的事情。

ubuntu 默认使用的 without-password :禁止使用密码登陆,当然就不行了!

博客 2015-03-08

配置 JDBC 数据源

1. 安装 openjdk(本人用的ubuntu)

sudo apt-get install openjdk-7-jre


2.下载安装 elasticsearch

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.4.deb
sudo dpkg -i elasticsearch-1.4.4.deb
/etc/init.d/elasticsearch start


3.安装JDBC 插件

./bin/plugin --install jdbc --url http://xbib.org/repository/org/xbib/elasticsearch/plugin/elasticsearch-river-jdbc/1.4.0.10/elasticsearch-river-jdbc-1.4.0.10.zip

4.安装Mysql JDBC 驱动

curl -o mysql-connector-java-5.1.33.zip -L 'http://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.33.zip/from/http://cdn.mysql.com/'
unzip mysql-connector-java-5.1.33.zip
cp mysql-connector-java-5.1.33-bin.jar $ES_HOME/plugins/jdbc/
chmod 644 $ES_HOME/plugins/jdbc/*
/etc/init.d/elasticsearch restart


http://localhost:9200/_nodes?settings=true&pretty=true  配置信息(安装路径、插件...)

更多参数见:https://github.com/jprante/elasticsearch-river-jdbc


5.测试mysql (用户root 密码passwd 库jdbctest 表名posts)

博客 2015-03-06

简介:

logrotate 是一个日志切分工具。一般要结合cron一起工作。

logstash 是日志集中管理工具,但输出到文件时不能自动按大小切分(目前只能按日期)

系统实例:

比如系统的messege/cron/secure 都是cron + logrotate(一周跑一次)

[root@mreald.com logstash_conf]# ls /var/log/mess* -1
/var/log/messages
/var/log/messages-20150208
/var/log/messages-20150215
/var/log/messages-20150222
/var/log/messages-20150301

1. 配置文件

[root@mreald.com  logstash_conf]# tree -finh /etc/logrotate*
/etc/logrotate.conf 
/etc/logrotate.d
[ 135]  /etc/logrotate.d/iptraf
[ 115]  /etc/logrotate.d/samba
[ 210]  /etc/logrotate.d/syslog
........................

2. 默认配置:

[root@mreald.com  logstash_conf]# cat /etc/logrotate.conf |grep -v \#
weekly
rotate 4
create
dateext
include /etc/logrotate.d
/var/log/wtmp {
    monthly
    create 0664 root utmp
minsize 1M
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

3. 自定义配置:

在 /etc/logrotate.d/下面 。比如:/etc/logrotate.d/syslog

微录 2015-03-05

我对全栈工程师的定义:

1.知识面广泛,有很强的学习能力,快速接受新知识,解决当前问题

2.什么都懂点,但能够找到相关方面的专业人士,实为伯乐

3.不再是一个工程师,而是一个有能力的组织者与创业者


一个真正的Full Stack Engineer,他从生活中发现问题,洞察需求,他设计解决方案,并开发出初始版本的产品。为了达到目标,他愿意去学习任何领域的技能和知识。同时他不追求一个人完成所有工作,如果有人可以比他在某方面做得更出色,便会十分热情的邀请他们加入。


最终他的职位也许不再是Engineer,他不再设计UI,不再写代码... 他的工作不再是设计/开发一款应用/产品,因为他有更大更重要的任务要做——design and building a team or a company which builds great products。 


博客 2015-03-03


index(索引)         相当关系型数据库一张表

type   (类型 )           索引的类型

mapping (映射)       相当于表结构和关系 

document(文档)  表一行

字段                         行的列

 

cluster/node               node 名相同,会尝试成为一个集群

shard 分片               (原因:1.单个容量限制 2.计算能力)

river                          (代表es的一个数据源,通过读取river中的数据并把它索引到es中)

gateway                   (代表es索引快照的存储方式  有本地文件系统(默认),共享的fs,分布式文件系统,Hadoop的HDFS和amazon的s3云存储服务)

discovery.zen           (代表es的自动发现节点机制,es是一个基于p2p的系统)

Transport                  代表es内部节点或集群与客户端的交互方式,默认内部是使用tcp协议进行交互



ES  REST API CRUD

-XPUT  -XPOST  原理不一样(前者是增加,后者是改变)

-XDELETE

curl -XPOST http://localhost:9200/_cluster/nodes/_shutdown

curl -XPOST http://localhost:9200/_cluster/nodes/

curl -XPOST http://localhost:9200/_cluster/nodes/Blljdsfjiwjefihsidfhh/_shutdown



博客 2015-03-02


Sort

awk -F'|' '{print $2":"$3}'  aaaa |sort -t ':'  -k2rn     (-t分隔符,-k 哪列 -n按数值大小排列)
sort -n -r -u file   ( num reserve unique )
sort -n -t ‘ ‘ -k 2 -k 3rn facebook.txt  (先k2 再k3)
sort -t ‘ ‘ -k 1.2 facebook.txt (从第一列第二个字母‘向后。。。’排序)
sort -t ‘ ‘ -k 1.2,1.2 -k 3,3nr facebook.txt(只对第二个字母排序,。。)
  du -hsx  /path/* | sort -rh | head -10  (文件系统最大的前10个文件)


Uniq

i-- 5/10 i++