Archive for 三月, 2017


loganalyzer乱记

一、安装配置rsyslog
1、安装
yum install rsyslog logrotate

2、配置
vi /etc/rsyslog.conf
$ModLoad imuxsock #imuxsock是模块名,支持本地系统日志的模块
$ModLoad imklog #imklog是模块名, 支持内核日志的模块
#$ModLoad immark #immark是模块名,支持日志标记
$ModLoad imudp #imupd是模块名,支持udp协议
$UDPServerRun 514 #允许514端口接收使用UDP协议转发过来的日志
$ModLoad imtcp #imtcp是模块名,支持tcp协议
$InputTCPServerRun 514 #允许接收tcp 514的端口传来的日志
$ModLoad ommysql #加载mysql的模块
*.* @x.x.x.x #loganalyzer服务器地址,@@是TCP连接,@是udp连接

3、重启服务,配置生效
chkconfig –level 35 rsyslog on
service rsyslog restart

二、安装配置rsyslog的mysql,数据库里存放日志信息
1、安装
yum install mysql-server rsyslog-mysql

2、设置mysql的密码
mysqladmin -u root password passw0rd

3、修改mysql默认字符集为utf8
# 登录mysql
mysql -u root -p
mysql> show databases; #显示数据库服务器中没有日志的数据库
mysql> SHOW VARIABLES LIKE ‘character%’; #查看mysql目前使用的字符集
# 修改mysql字符集
vi /etc/my.cnf
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
init_connect=‘SET NAMES utf8’
[mysqld_safe]
default-character-set=utf8
# 重启mysql服务生效
chkconfig –level 35 mysqld on
service mysqld restart

4、建立rsyslog的库,并设置用户权限
# 编辑rsyslog数据库的sql脚本,使其默认字符集为utf8。
cd /usr/share/doc/rsyslog-mysql-5.8.10/
vi createDB.sql #第一行前面添加如下一行
SET NAMES ‘utf8’;
# 导入日志文件的sql脚本,生成日志文件的数据库
mysql -u root -p < createDB.sql
# 设置数据库权限
mysql> use Syslog; #Syslog即是记录日志文件的数据库
mysql> show tables; #查看Syslog的表
mysql> GRANT ALL ON Syslog.* TO sysloguser@localhost IDENTIFIED BY ‘syslogpass’; #设置用户访问的数据
mysql> FLUSH PRIVILEGES; #重读授权表,及时生效
mysql> \q #退出

三、安装配置loganalyzer日志分析工具的环境
1、安装httpd用来提供web服务,php使apache支持php,因为loganalyzer是用php编写,php-mysql用于loganalyzer连接数据库,php-gd用于绘图
yum install httpd php php-mysql php-gd

2、下载最新版loganalyzer
http://loganalyzer.adiscon.com
mkdir -pv /web/loganalyzer
cd ~
tar xvzf loganalyzer-4.1.5.tar.gz
cd loganalyzer-4.1.5
mv src/* /web/loganalyzer/
cd contrib/
mv ./*.sh /web/loganalyzer/

3、执行loganalyzer脚本
cd /web/loganalyzer/
bash configure.sh

4、修改apache配置文件
vi /etc/httpd/conf/httpd.conf
ServerName 127.0.0.1:80
DirectoryIndex index.php index.html index.html.var
#DocumentRoot “/var/www/html" #注释掉默认存放网页文件的路径
DocumentRoot /web/loganalyzer #指定存放loganalyzer网页文件的路径

5、重启生效
chkconfig –level 35 httpd on
service httpd restart

6、创建loganalyzer的数据库,并授权
mysql> create database loganalyzer;
mysql> grant all on loganalyzer.* to lyzeruser@localhost identified by ‘lyzerpass’;
mysql> flush privileges;

四、WEB安装loganalyzer
1、打开浏览器:http://localhost

2、配置页面step3的时候
”Enable User Database”选择“Yes”
user database options里面配
database host localhost
database port 3306
database name loganalyzer
table prefix logcon_
database user lyzeruser
database password lyzerpass

3、配置页面step7的时候
”Source Type” 选择 “MYSQL Native”并在下载配置数据库信息
database type options里面配
database host localhost
database name Syslog
database tablename SystemEvents
database user sysloguser
database password syslogpass

4、添加显示IP功能
# 修改配置文件
vi /etc/rsyslog.conf
$template InsertIP,"insert into SystemEvents (Message, Facility, FromHost, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID,SysLogTag, processid) values (‘%msg%’, %syslogfacility%, ‘%HOSTNAME%’, %syslogpriority%, ‘%timereported:::date-mysql%’, ‘%timegenerated:::date-mysql%’, %iut%, ‘%syslogtag%’, ‘%fromhost-ip%’)",SQL
#$template insertpl,"insert into SystemEvents (Message, Facility, FromHost, FromIP,Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values (‘%msg%‘, %syslogfacility%,‘%HOSTNAME%‘, ‘%fromhost-ip%‘, %syslogpriority%, ‘%timereported:::date-mysql%‘, ‘%timegenerated:::date-mysql%‘, %iut%, ‘%syslogtag%‘)",SQL
*.* :ommysql:localhost,Syslog,sysloguser,syslogpass;InsertIP #sql语句一定要添加到此行之前
# 重启服务生效
service rsyslog restart
# 添加数据库表字段
mysql> USE Syslog;
mysql> ALTER TABLE SystemEvents ADD FromIP VARCHAR(60) DEFAULT NULL AFTER FromHost;

5、解决中文显示乱码
# 编辑网站里的include/functions_common.php文件,找到含有return htmlentities字段的行;
return htmlentities($myStr, ENT_NOQUOTES, $content[‘HeaderDefaultEncoding‘]);// “UTF-8″);
修改为:
return htmlentities($myStr, ENT_NOQUOTES, $content[‘HeaderDefaultEncoding‘], “UTF-8″);
注意小括号有去除,分号改逗号。
# 网页视图首选项改为utf8
admin center –>preference–>global options only 设置默认字符为utf-8

6、用processid 显示ip
然后再Admin center->FIELD—>processid->displayname 修改为IP

7、汉化界面
拷贝zh/目录到/web/loganalyzer/lang/下面

====================================
PS:
/etc/rsyslog.conf
#### GLOBAL DIRECTIVES ####定义全局日志格式的指令
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #定义日志格式默认模板
$IncludeConfig /etc/rsyslog.d/*.conf #载入rsyslog.d文件中所有以conf结尾的文件
#### RULES ####
*.info;mail.none;authpriv.none;cron.none /var/log/messages
#####记录所有日志类型的info级别以及大于info级别的信息到/var/log/messages,但是mail邮件信息,authpriv验证方面的信息和cron时间#任务相关的信息除外
authpriv.* /var/log/secure
#####authpriv验证相关的所有信息存放在/var/log/secure
mail.* -/var/log/maillog
#####邮件的所有信息存放在/var/log/maillog; 这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大
cron.* /var/log/cron
####计划任务有关的信息存放在/var/log/cron
*.emerg * (*表示所有用户)
###记录所有的大于等于emerg级别信息, 以wall方式发送给每个登录到系统的人
uucp,news.crit /var/log/spooler
####记录uucp,news.crit等存放在/var/log/spooler
local7.* /var/log/boot.log
####本地服务器的启动的所有日志存放在/var/log/boot.log中

——————–
rsyslog有三部分组成:facility(设施),priority(级别),Target(路径)
facility: 设施,从功能或程序上对日志进行分类,并由专门的工具(facility)负责记录相应的日志信息;
###rsyslog.conf中日志规则的定义的格式
facitlity.priority Target
#facility: 日志设备(可以理解为日志类型):
auth #pam产生的日志,认证日志
authpriv #ssh,ftp等登录信息的验证信息,认证授权认证
cron #时间任务相关
daemon:守护进程相关
kern #内核
lpr #打印
mail #邮件
mark(syslog) #rsyslog服务内部的信息,时间标识
news #新闻组
user #用户程序产生的相关信息
uucp #unix to unix copy, unix主机之间相关的通讯
local 1~7 #用户自定义facility

——————–
#priority: 级别日志级别:

debug #7有调式信息的,日志信息最多
info #6一般信息的日志,最常用
notice #5最具有重要性的普通条件的信息
warning, warn #4警告级别
err, error #3错误级别,阻止某个功能或者模块不能正常工作的信息
crit #2严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert #1需要立刻修改的信息
emerg, panic #0内核崩溃等严重信息
###从上到下,级别从低到高,记录的信息越来越少,如果设置的日志内性为err,则日志不会记录比err级别低的日志,只会记录比err更高级别的日志,也包括err本身的日志。
指定级别的方式:
*: 所有级别
none: 没有级别
priority: 比此级别高的(包含)所有级别的日志信息都会记录
=priority: 仅记录指定级别
——————————
Target:
#文件, 如/var/log/messages
#用户, root,*(表示所有用户)
#日志服务器,@x.x.x.x
#管道 | COMMAND

# 示例
*.info;mail.none;authpriv.none;cron.none;local0.none;local1.none;local2.none;local3.none;local4.none;local5.none;local6.none;local7.none /var/log/messages
=================================
#修改Syslog数据库的字符集
mysql> ALTER DATABASE `Syslog` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

#修改相应数据表的字符集
mysql> alter table SystemEvents default character set =utf8;

mysql> alter table SystemEventsPorperties default character set =utf8;

————————
#查看数据库的字符集设置
mysql> show variables like ‘character%’;

#查看Systlog数据库所有表的字符集设置
mysql> use Syslog;
mysql> show table status from Syslog\G;

===============================
# vim /etc/rsyslog.conf
$ModLoad imfile
$InputFileName /var/log/httpd/access_log
$InputFileTag packetfence:
$InputFileStateFile stat-packetfence

$InputFileSeverity info
$InputFileFacility local5
$InputFilePollInterval 1
$InputFilePersistStateInterval 1
$InputRunFileMonitor
local5.* @192.168.1.106:514

File [/path/to/file]
被监控的文件必须是一个绝对路径

Tag [tag:]
用于文件消息标记会记录到日志标签上

Facility [facility]
设施:比如local1,local2,localN;默认是local0

Severity [syslogSeverity]
级别:比如info,warning…默认是notice

PersistStateInterval [lines]
被用来控制状态文件的持久化频率,测试阶段,可以把它设置的小点儿,正式阶段,出于效率的考虑,可以把它调大点儿,但是相应的也会出现丢失数据的潜在风险,
具体设置多少合适需要结合自己的情况来斟酌

===================================
在Client上执行以下操作,会记录用户在命令行执行的所有命令记录
# vim /etc/bashrc
export PROMPT_COMMAND='{ msg=$(history 1 | { read x y; echo $y; });logger “[euid=$(whoami)]":$(who am i):[`pwd`]"$msg"; }’
# source /etc/bashrc

=============================
vim /etc/rsyslog.conf
$ModLoad ommysql
*.info;mail.none;authpriv.none;cron.none :ommysql:192.168.1.102,Syslog,rsysloguser,rsyslogpass
以上操作即可
说明
除mail、authpriv和cron之外的日志并且级别为info或者比info更高的都会被发送到远程192.168.1.102的数据库当中,后面是数据库的用户名和密码。
=======================================
grant all on Syslog.* to ‘syslogroot’@’10.141.133.44’ identified by ‘syslogpass’;

grant all on loganalyzer.* to lyzeruser@’10.141.133.44′ identified by ‘lyzeruser’;
$template insertpl,"insert into SystemEvents (Message, Facility, FromHost, FromIP, Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values (‘%msg%’, %syslogfacility%, ‘%HOSTNAME%’, ‘%fromhost-ip%’, %syslogpriority%, ‘%timereported:::date-mysql%’, ‘%timegenerated:::date-mysql%’, %iut%, ‘%syslogtag%’)",SQL
client端添加

/etc/rsyslog.conf
*.* @10.141.133.44
*.* :ommysql:10.141.133.44,Syslog,syslogroot,syslogpass
$template insertpl,"insert into SystemEvents (Message, Facility, FromHost, FromIP,Priority, DeviceReportedTime, ReceivedAt, InfoUnitID, SysLogTag) values (‘%msg%’, %syslogfacility%,’%HOSTNAME%’, ‘%fromhost-ip%’, %syslogpriority%, ‘%timereported:::date-mysql%’, ‘%timegenerated:::date-mysql%’, %iut%, ‘%syslogtag%’)",SQL

========================
去掉(Donate)按钮

vim /var/www/html/loganalyzer/include/functions_common.php
将下行改为false
$content[‘SHOW_DONATEBUTTON’] = false; // Default = true!

———————–
更换分析页面首页图示(Logo)

1. 首先将准备好的logo放至images/main目录下。
2. 编辑include/functions_common.php
3. 修改如下路径:
$content[‘EXTRA_PHPLOGCON_LOGO’] = $content[‘BASEPATH’] .
“images/main/Header-Logo.png";
mysql> USE Syslog;
mysql> ALTER TABLE SystemEvents ADD FromIP VARCHAR(60) DEFAULT NULL AFTER FromHost;

uID => id, Date => devicereportedtime, Host => fromhost, Messagetype => infounitid, Message => message, Facility => facility, Severity => priority, Syslogtag => syslogtag, ProcessID => processid, Event ID => eventid, Eventlog Type => eventlogtype, Event Source => eventsource, Event Category => eventcategory, Event User => eventuser, SystemID => systemid, Checksum => checksum

在交换机上的配置:
华为的:
info-center loghost 1.1.1.1 facility local4 //local4要和rsyslog.conf 里配置的一致,1.1.1.1为你的syslog服务器地址记得要改啊
info-center loghost source Vlan-interface 100//你的网管VLAN接口,要改的
info-center source SHELL channel loghost log level notifications//我只想要操作日志,其他的不关心,如果你想要更多,请更改
思科的:
logging 1.1.1.1(配置 syslog服务器地址,可以定义多个)
service timestamps debug datetime localtime show-timezone msec
service timestamps log datetime localtime show-timezone msec (syslog 信息包含时间戳)
logging facility local4 (定义 facility 级别,缺省为local7,可以设置从 local0 到 local7)
logging trap warning (定义severity 级别缺省为 infor 级别)

git使用

一、单机仓库:

0、常识
git分为版本库(Repository)、暂存区(Stage)、工作区(本机自己修改或创建且并未提交commit的的文件)
在Git里,每次提交,Git都把它们串成一条时间线,这条时间线就是一个分支。这个分支叫主分支,即master分支。HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支。
当你从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来了,并且,远程仓库的默认名称是origin。
忽略某些文件时,需要编写.gitignore;.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理!
每个仓库的Git配置文件都放在.git/config文件中,而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中

1、给client使用者起个名字和Email地址
git config –global user.name “Your Name"
git config –global user.email “email@example.com"

2、用命令git add告诉Git,把文件添加到仓库
git add readme.txt

3、用命令git commit告诉Git,把文件提交到仓库
git commit -m “wrote a readme file"

4、丢弃工作区的修改,说白了就是把版本库中的文件重新拽下来一次
git checkout — readme.txt

5、把暂存区的修改撤销掉(unstage)
git reset HEAD readme.txt

6、从版本库中删除一个文件
git rm test.txt
git commit -m “remove test.txt"

7、初始化Git仓库
git init –bare sample.git

8、禁用shell登录
vi /etc/passwd
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

二、远程仓库:

1、把一个已有的本地仓库与远程库关联
git remote add origin git@xxx.com:username/reponame.git

2、把本地仓库master分支的所有内容推送到远程库上
git push -u origin master

3、从远程库克隆
git clone git@xxx.com:username/reponame.git

4、创建dev分支,然后切换到dev分支(git checkout命令加上-b参数表示创建并切换,相当于以下两条命令:git branch dev; git checkout dev)
git checkout -b dev

5、查看当前分支(当前分支前面会标一个*号)
git branch

6、切换回master分支
git checkout master

7、把dev分支的工作成果合并到master分支上(git merge –no-ff -m “merge with no-ff" dev; 加上–no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。)
git merge dev

8、删除dev分支
git branch -d dev

9、带参数的git log也可以看到分支的合并情况
git log –graph –pretty=oneline –abbrev-commit

10、把当前工作现场“储藏”起来,等以后恢复现场后继续工作:
git stash
刚才的工作现场存到哪去了?
git stash list
恢复stash内容(用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除)
git stash pop \\恢复的同时把stash内容也删了

11、删除一个没有被合并过的分支
git branch -D <name>

12、查看远程库的详细信息
git remote -v

13、推送分支,就是把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上
git push origin <name>

14、在dev分支上开发,就必须创建远程origin的dev分支到本地
git checkout -b dev origin/dev

15、从本地推送分支
git push origin <branch-name>
如果推送失败
git pull \\抓取远程的新提交
如果git pull也失败了,原因是没有指定本地dev分支与远程origin/dev分支的关联,根据提示,设置dev和origin/dev的链接:
git branch –set-upstream dev origin/dev

16、在本地创建和远程分支对应的分支
git checkout -b <branch-name> origin/<branch-name>

三、标签管理
1、打一个新标签
git tag v1.0

2、查看所有标签
git tag

3、找到历史提交的commit id
git log –pretty=oneline –abbrev-commit

4、对commit id是6224937打0.9标签
git tag v0.9 6224937

5、查看标签信息
git show <tagname>

6、创建带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -a v0.1 -m “version 0.1 released" 3628164

7、用PGP签名标签
git tag -s <tagname> -m “blablabla…" fec145a

8、删除标签
git tag -d v0.1

9、推送某个标签到远程
git push origin <tagname>

10、一次性推送全部尚未推送到远程的本地标签
git push origin –tags

11、删除远程标签,先从本地删除
git tag -d v0.9
git push origin :refs/tags/v0.9

四、自定义git
1、让Git显示颜色,会让命令输出看起来更醒目
git config –global color.ui true

2、忽略特殊文件https://github.com/github/gitignore
在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。

3、.gitignore写得有问题,可以用-f强制添加到Git
git add -f App.class

4、若发现可能是.gitignore写得有问题,需要找出来到底哪个规则写错了
git check-ignore -v App.class

5、命令别名
git config –global alias.st status
git config –global alias.co checkout
git config –global alias.ci commit
git config –global alias.br branch
git config –global alias.unstage ‘reset HEAD’
git config –global alias.last ‘log -1’
PS:状态类命令
1、git status命令可以让我们时刻掌握仓库当前的状态
git status

2、git diff查看readme.txt文件修改内容
git diff readme.txt
查看工作区和版本库里面最新版本的区别
git diff HEAD — readme.txt

3、git log查看提交历史,以便确定要回退到哪个版本
git log
简洁版选项
git log –pretty=oneline

4、查看命令历史,以便确定要回到未来的哪个版本
git reflog

5、在版本的历史之间穿梭(7位数字用git log或者git reflog都可以看到对应版本的文件)
git reset –hard 3628164