Ansible工作原理(2)

运维技术采菊篱下 发表了文章 • 0 个评论 • 1195 次浏览 • 2015-09-27 10:39 • 来自相关话题

HOW ANSIBLE WORKS

1.有效的体系结构
Ansible作品通过连接节点和推出小程序,称为“Ansible模块”。这些程序都写资源模型系统的所期望的状态。Ansible然后执行这些模块通过SSH(默认情况下),并完成后删除它们。

你的库的模块可以驻留在任何机器上,并且没有服务器守护进程,或数据库。通常你会使用你最喜欢的终端程序,一个文本编辑器,可能版本控制系统来跟踪你的内容的变化。

你的朋友SSH KEYS

支持密码,但SSH keys with key-agent使用Ansible是最好的方法之一。但如果您想要使用Kerberos,不错。很多选择!root不需要登录,您可以登录任何用户,然后su或sudo任何用户。

Ansible“authorized_key”模块是一个伟大的方式使用Ansible控制什么机器可以访问主机。其他选项,如kerberos或身份管理系统,也可以使用。
ssh-agent bash
ssh-add ~/.ssh/id_rsa管理你的主机在简单的文本文件中

默认情况下,Ansible代表什么机器使用一个非常简单的INI文件管理,管理你所有的机器组自己的选择。

添加新的机器,没有额外的SSL签名服务器的参与,所以没有任何麻烦决定为什么一个特定的机器没能联系起来,由于模糊的NTP或DNS问题。

如果在你的基础设施有一个真理的来源,也可以,用插件,如图库存,组,和来自像EC2,Rackspace,OpenStack变量的信息,或者更多。

下面是一个纯文本文件清单:
[webservers]
www1.example.com
www2.example.com

[dbservers]
db0.example.com
db1.example.com一旦库存列出主机变量可以分配给他们在简单的文本文件(子目录称为“group_vars /”或“host_vars /”或直接在库存文件。

或者,正如前面提到的,使用一个动态库存,库存等数据源EC2,Rackspace,或者OpenStack。
2.基础知识:使用ANSIBLE特设并行任务执行
一旦你有了一个实例,你可以谈论它,没有任何额外的设置:
ansible all -m ping
ansible foo.example.com -m yum "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"请注意,我们已经访问原始状态的资源模块以及运行命令。这些模块是非常容易编写和Ansible ships with a fleet of them的大部分工作已经完成。

Ansible包含一个巨大的工具箱构建模块,超过200个。Module: http://docs.ansible.com/modules_by_category.html

Playbooks:一个简单+强大的自动化语言

Playbooks可以精心编排多个片基础设施拓扑,和非常详细的控制有多少机器来解决。这是Ansible开始变得最有趣的地方。

Ansible编排的方法是一个良好的简单,因为我们相信你的自动化代码应该完美的意义,应该有很少记住关于特殊的语法或特性。

这是一个Playbooks是什么样子的。作为一个提醒,这只是这里的宣传片,跳在docs.ansible.com的完整的文档和所有可能的。
---
[list]
[*]hosts: webservers[/*]
[/list] serial: 5 # update 5 machines at a time
roles:
- common
- webapp


[list]
[*]hosts: content_servers[/*]
[/list] roles:
- common
- contentAN EXAMPLE app_config.yml MIGHT LOOK LIKE:
---
[list]
[*]yum: name= state=installed[/*]
[/list] with_items:
- app_server
- acme_software

[list]
[*]service: name=app_server state=running enabled=yes[/*]
[/list]
[list]
[*]template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf[/*]
[/list] notify:
- restart app serverThe Ansible doc explores this in much greater depth. There’s a LOT more that you can do, including:
Ansible文档探索在更大的深度。还有很多,你可以做的,包括:
[]机器的负载平衡器和监控窗口[/][]有一个服务器知道所有其他人的IP地址使用事实收集关于这些特定的服务器,使用这些动态构建配置文件[/][]设置一些变量和其他提示,当他们没有设置默认值[/][]使用一个命令的结果决定是否运行另一个[/]
有很多先进的可能性但很容易开始最重要的是,语言仍是可读的、透明的,你从来没有声明明确的订购关系或编程语言编写代码。

EXTEND ANSIBLE: MODULES, PLUGINS and API

Should you want to write your own, Ansible modules can be written in any language that can return JSON (Ruby, Python, bash, etc). Inventory can also plug in to any datasource by writing a program that speaks to that datasource and returns JSON. There’s also various Python APIs for extending Ansible’s connection types (SSH is not the only transport possible), callbacks (how Ansible logs, etc), and even for adding new server side behaviors.

延长ANSIBLE:模块、插件和API

如果你想写自己的,Ansible模块可以用任何语言编写,可以返回JSON(Ruby、Python、bash等)。库存也可以插入到任何数据源通过编写一个程序,说到数据源并返回JSON。还有各种Python api扩展Ansible的连接类型(SSH可能不是唯一的运输),回调(如何Ansible日志等),甚至添加新的服务器端行为。

翻译原文:http://www.ansible.com/how-ansible-works 查看全部


HOW ANSIBLE WORKS


1.有效的体系结构
Ansible作品通过连接节点和推出小程序,称为“Ansible模块”。这些程序都写资源模型系统的所期望的状态。Ansible然后执行这些模块通过SSH(默认情况下),并完成后删除它们。

你的库的模块可以驻留在任何机器上,并且没有服务器守护进程,或数据库。通常你会使用你最喜欢的终端程序,一个文本编辑器,可能版本控制系统来跟踪你的内容的变化。

你的朋友SSH KEYS

支持密码,但SSH keys with key-agent使用Ansible是最好的方法之一。但如果您想要使用Kerberos,不错。很多选择!root不需要登录,您可以登录任何用户,然后su或sudo任何用户。

Ansible“authorized_key”模块是一个伟大的方式使用Ansible控制什么机器可以访问主机。其他选项,如kerberos或身份管理系统,也可以使用。
ssh-agent bash
ssh-add ~/.ssh/id_rsa
管理你的主机在简单的文本文件中

默认情况下,Ansible代表什么机器使用一个非常简单的INI文件管理,管理你所有的机器组自己的选择。

添加新的机器,没有额外的SSL签名服务器的参与,所以没有任何麻烦决定为什么一个特定的机器没能联系起来,由于模糊的NTP或DNS问题。

如果在你的基础设施有一个真理的来源,也可以,用插件,如图库存,组,和来自像EC2,Rackspace,OpenStack变量的信息,或者更多。

下面是一个纯文本文件清单:
    [webservers]
www1.example.com
www2.example.com

[dbservers]
db0.example.com
db1.example.com
一旦库存列出主机变量可以分配给他们在简单的文本文件(子目录称为“group_vars /”或“host_vars /”或直接在库存文件。

或者,正如前面提到的,使用一个动态库存,库存等数据源EC2,Rackspace,或者OpenStack。
2.基础知识:使用ANSIBLE特设并行任务执行
一旦你有了一个实例,你可以谈论它,没有任何额外的设置:
ansible all -m ping 
ansible foo.example.com -m yum "name=httpd state=installed"
ansible foo.example.com -a "/usr/sbin/reboot"
请注意,我们已经访问原始状态的资源模块以及运行命令。这些模块是非常容易编写和Ansible ships with a fleet of them的大部分工作已经完成。

Ansible包含一个巨大的工具箱构建模块,超过200个。Module: http://docs.ansible.com/modules_by_category.html

Playbooks:一个简单+强大的自动化语言

Playbooks可以精心编排多个片基础设施拓扑,和非常详细的控制有多少机器来解决。这是Ansible开始变得最有趣的地方。

Ansible编排的方法是一个良好的简单,因为我们相信你的自动化代码应该完美的意义,应该有很少记住关于特殊的语法或特性。

这是一个Playbooks是什么样子的。作为一个提醒,这只是这里的宣传片,跳在docs.ansible.com的完整的文档和所有可能的。
---
[list]
[*]hosts: webservers[/*]
[/list] serial: 5 # update 5 machines at a time
roles:
- common
- webapp


[list]
[*]hosts: content_servers[/*]
[/list] roles:
- common
- content
AN EXAMPLE app_config.yml MIGHT LOOK LIKE:
---
[list]
[*]yum: name= state=installed[/*]
[/list] with_items:
- app_server
- acme_software

[list]
[*]service: name=app_server state=running enabled=yes[/*]
[/list]
[list]
[*]template: src=/opt/code/templates/foo.j2 dest=/etc/foo.conf[/*]
[/list] notify:
- restart app server
The Ansible doc explores this in much greater depth. There’s a LOT more that you can do, including:
Ansible文档探索在更大的深度。还有很多,你可以做的,包括:
    []机器的负载平衡器和监控窗口[/][]有一个服务器知道所有其他人的IP地址使用事实收集关于这些特定的服务器,使用这些动态构建配置文件[/][]设置一些变量和其他提示,当他们没有设置默认值[/][]使用一个命令的结果决定是否运行另一个[/]

有很多先进的可能性但很容易开始最重要的是,语言仍是可读的、透明的,你从来没有声明明确的订购关系或编程语言编写代码。

EXTEND ANSIBLE: MODULES, PLUGINS and API

Should you want to write your own, Ansible modules can be written in any language that can return JSON (Ruby, Python, bash, etc). Inventory can also plug in to any datasource by writing a program that speaks to that datasource and returns JSON. There’s also various Python APIs for extending Ansible’s connection types (SSH is not the only transport possible), callbacks (how Ansible logs, etc), and even for adding new server side behaviors.

延长ANSIBLE:模块、插件和API

如果你想写自己的,Ansible模块可以用任何语言编写,可以返回JSON(Ruby、Python、bash等)。库存也可以插入到任何数据源通过编写一个程序,说到数据源并返回JSON。还有各种Python api扩展Ansible的连接类型(SSH可能不是唯一的运输),回调(如何Ansible日志等),甚至添加新的服务器端行为。

翻译原文:http://www.ansible.com/how-ansible-works

Ansible介绍(1)

运维技术采菊篱下 发表了文章 • 0 个评论 • 1387 次浏览 • 2015-09-27 10:25 • 来自相关话题

Ansible是一个自动化工具。它可以配置系统,部署软件,编排更高级的任务,比如连续部署或零停机时间滚动更新。

Ansible的目标是最简单和最易用。它也有一个强烈关注安全性和可靠性,以最少的移动部件,使用OpenSSH运输(加速插座模式和拉模式选择),和设计语言,人类可审核性的——甚至是那些不熟悉程序。

我们认为简单是所有大小的环境和相关的设计对于忙碌的所有类型的用户——这是否意味着开发人员、系统管理员,发布工程师,经理,无处不在。Ansible适合管理小设置少量的实例以及与许多成千上万的企业环境。

Ansible管理机器以最好的方式。没有一个问题如何升级远程守护进程或无法管理系统的问题因为守护进程是卸载。OpenSSH是最同行评议的开源组件,使用该工具的安全风险大大降低。Ansible是分散的,它依赖于现有的操作系统凭证来控制访问远程机器,如果需要使用Kerberos,它可以很容易地连接LDAP和其他管理系统的集中式身份验证。

Ansible是一个彻底的简单自动化引擎,自动化云配置,配置管理、应用程序部署,intra-service编排,以及许多其他的需求。

被设计为多层部署自第一天,Ansible模型你的IT基础设施,描述如何推动你所有的系统,而不仅仅是管理一个系统。

它使用没有代理,没有额外的自定义安全基础设施,所以很容易部署,最重要的是,它使用一个非常简单的语言(YAML Ansible Playbooks的形式),让你描述你的自动化工作的方式方法简明英语。

我们利用Ansible主要是作为内网服务器的一些管理,因为他用ssh来管理配置,内网同学还是很快速的,外网主要是利用Saltstack,利用消息队列远程通信,我感觉是比Ansible好的。 查看全部
Ansible是一个自动化工具。它可以配置系统,部署软件,编排更高级的任务,比如连续部署或零停机时间滚动更新。

Ansible的目标是最简单和最易用。它也有一个强烈关注安全性和可靠性,以最少的移动部件,使用OpenSSH运输(加速插座模式和拉模式选择),和设计语言,人类可审核性的——甚至是那些不熟悉程序。

我们认为简单是所有大小的环境和相关的设计对于忙碌的所有类型的用户——这是否意味着开发人员、系统管理员,发布工程师,经理,无处不在。Ansible适合管理小设置少量的实例以及与许多成千上万的企业环境。

Ansible管理机器以最好的方式。没有一个问题如何升级远程守护进程或无法管理系统的问题因为守护进程是卸载。OpenSSH是最同行评议的开源组件,使用该工具的安全风险大大降低。Ansible是分散的,它依赖于现有的操作系统凭证来控制访问远程机器,如果需要使用Kerberos,它可以很容易地连接LDAP和其他管理系统的集中式身份验证。

Ansible是一个彻底的简单自动化引擎,自动化云配置,配置管理、应用程序部署,intra-service编排,以及许多其他的需求。

被设计为多层部署自第一天,Ansible模型你的IT基础设施,描述如何推动你所有的系统,而不仅仅是管理一个系统。

它使用没有代理,没有额外的自定义安全基础设施,所以很容易部署,最重要的是,它使用一个非常简单的语言(YAML Ansible Playbooks的形式),让你描述你的自动化工作的方式方法简明英语。

我们利用Ansible主要是作为内网服务器的一些管理,因为他用ssh来管理配置,内网同学还是很快速的,外网主要是利用Saltstack,利用消息队列远程通信,我感觉是比Ansible好的。

python利用ansible磁盘检测报警

编程语言采菊篱下 发表了文章 • 0 个评论 • 1184 次浏览 • 2015-09-24 15:16 • 来自相关话题

简单的利用python调用ansible检测内网服务器磁盘,然后报警,看代码吧,写得有点糙,很多地方都没有考虑异常抛出,和处理,暂时能用就行,The following code:

#!/usr/bin/env python
# encoding: utf-8
#Author: Lucky chen

import datetime,time,traceback
import smtplib,os,re
import threading
from string import join

def sendmail(subject='', msg='', fromaddr='lucky@hadoope.com', toaddrs=):
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
mail_msg = MIMEMultipart()
mail_msg['Subject'] = subject
mail_msg['From'] = fromaddr
mail_msg['To'] = ','.join(toaddrs)
mail_msg.attach(MIMEText(msg, 'html', 'utf-8'))
#print mail_msg.as_string()
try:
[size=16]# Intranet mail server[/size]
s = smtplib.SMTP('10.3.8.2')
s.sendmail(fromaddr, toaddrs, mail_msg.as_string())
s.quit()
except:
error_result = traceback.format_exc()
print error_result


def check_sendmail(zn,hn):
#The recipient email
mailto_list=['ronghua@139.com', 'lucky@hadoope.com']
f = '%'
mail_content = "host %s %s zone used gt 95%s" % (hn, zn, f)
sub = "online host Disk usage"
sendmail(subject=sub, msg=mail_content, toaddrs=mailto_list)


def check_result(cmd,hname):
resu = os.popen(cmd).read().strip().split()
#print resu
#To obtain / /data zone Pointer to the location
rnum, dnum = resu.index("/") - 1 , resu.index("/data") - 1
[size=16] get root /data zone % num[/size]
rzone, dzone = int(resu[rnum].split('%')[0]), int(resu[dnum].split('%')[0])
#print type(rzone)
#print rzone,dzone,hname

if rzone > 95:
check_sendmail(zn="/",hn=hname)
if dzone > 95:
check_sendmail(zn='/data',hn=hname)

if __name__=='__main__':
[size=16]ansible host list /etc/ansible/hosts[/size]
host=['web1','web2','db1','db2']
for dest in host:
comm = "ansible %s -m shell -a 'df -h'" % (dest)
#print comm
#check_result(cmd=comm,hname=dest)
s = threading.Thread(target = check_result,args = (comm,dest))
s.start() 查看全部
python.png


简单的利用python调用ansible检测内网服务器磁盘,然后报警,看代码吧,写得有点糙,很多地方都没有考虑异常抛出,和处理,暂时能用就行,The following code:


#!/usr/bin/env python
# encoding: utf-8
#Author: Lucky chen

import datetime,time,traceback
import smtplib,os,re
import threading
from string import join

def sendmail(subject='', msg='', fromaddr='lucky@hadoope.com', toaddrs=):
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
mail_msg = MIMEMultipart()
mail_msg['Subject'] = subject
mail_msg['From'] = fromaddr
mail_msg['To'] = ','.join(toaddrs)
mail_msg.attach(MIMEText(msg, 'html', 'utf-8'))
#print mail_msg.as_string()
try:
[size=16]# Intranet mail server[/size]
s = smtplib.SMTP('10.3.8.2')
s.sendmail(fromaddr, toaddrs, mail_msg.as_string())
s.quit()
except:
error_result = traceback.format_exc()
print error_result


def check_sendmail(zn,hn):
#The recipient email
mailto_list=['ronghua@139.com', 'lucky@hadoope.com']
f = '%'
mail_content = "host %s %s zone used gt 95%s" % (hn, zn, f)
sub = "online host Disk usage"
sendmail(subject=sub, msg=mail_content, toaddrs=mailto_list)


def check_result(cmd,hname):
resu = os.popen(cmd).read().strip().split()
#print resu
#To obtain / /data zone Pointer to the location
rnum, dnum = resu.index("/") - 1 , resu.index("/data") - 1
[size=16] get root /data zone % num[/size]
rzone, dzone = int(resu[rnum].split('%')[0]), int(resu[dnum].split('%')[0])
#print type(rzone)
#print rzone,dzone,hname

if rzone > 95:
check_sendmail(zn="/",hn=hname)
if dzone > 95:
check_sendmail(zn='/data',hn=hname)

if __name__=='__main__':
[size=16]ansible host list /etc/ansible/hosts[/size]
host=['web1','web2','db1','db2']
for dest in host:
comm = "ansible %s -m shell -a 'df -h'" % (dest)
#print comm
#check_result(cmd=comm,hname=dest)
s = threading.Thread(target = check_result,args = (comm,dest))
s.start()

Python系统信息模块Psutil介绍

编程语言采菊篱下 发表了文章 • 0 个评论 • 2868 次浏览 • 2015-09-23 00:52 • 来自相关话题

   
     psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU 、内存、磁盘、网络等)信息,它主要应用于系统监控,分析和限制系统资源以及进程的管理。它可以实现等同于命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和SunSolaris等操作系统,支持从2.4到3.4的python版本,目前最新版本为2.0.0。
 
    通常我们获取操作系统信息往往采用编写shell脚本来实现,如获取当前系统的物理内存总大小和使用大小,shell命令如下:物理内存total值: free -m |grep Mem |awk ‘{print $2}’
物理内存used值:free -m |grep Mem | awk ‘{print $3}’    相比较而言,使用psutil库实现起来就更加简单了。psutil大小单位一般采用字节(Byte),如下:>>> import psutil
[quote]>> mem = psutil.virtual_memory()
>>> mem.total,mem.used
(8361156608L, 8215703552L)
转换成M为单位的话可以如下:
>>> print mem.total/1024/1024,mem.used/1024/1024
7973 7835

psutil的安装

    centos下:[root@crh]#yum search python |grep psutil
python26-psutil.x86_64 : A process and system utilities module for Python
所以我只需要yum -y install python26-psutil 就可以了    源码安装:[root@crh]#wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz
[root@crh]#tar zxf psutil-2.0.0.tar.gz
[root@crh]#cd psutil-2.0.0
[root@crh]#python setup.py install
安装完成后,进入到python交互模式你可以导入试试。。。。

获取系统性能信息

    采集系统的基本性能信息包括(cpu、内存、磁盘、网络等,可以完整描述当前系统的运行的状态以及质量。psutil模块已经封装好了这些方法,用户可以根据自身的应用场景,调用相应的方法来满足需求,非常简单实用,那我们就开始来学习吧。走起。。。。。
 
1.CPU信息
    Linux操作系统的CPU利用率主要有以下几个部分:
[]User Time, 执行用户进程的时间百分比;[/][]System Time,执行内核进程和中断的时间百分比;[/][]Wait IO, 由于IO等待而让CPU处于idle(空闲)状态的时间百分比;[/][]Idle, CPU处于idle状态的时间百分比。[/]
    我们使用Python的psutil.cpu_times()方法可以非常简单的获取到这些信息,同时也可以获取到CPU的硬件相关的信息,比如CPU的物理个数和逻辑个数,具体看下面的操作例子:>>> import psutil
>>> psutil.cpu_times() [size=16]使用cpu_items方法获取CPU完整信息[/size]
cputimes(user=202656.94, nice=0.85999999999999999, system=83652.119999999995, idle=10823517.810000001, iowait=1242.27, irq=632.41999999999996, softirq=8720.3500000000004)[/quote]

[quote]>> psutil.cpu_times(percpu=True) #[size=16]#显示所有逻辑CPU的信息,指定percpu=True就好[/size]
[cputimes(user=8798.4200000000001, nice=0.029999999999999999, system=4920.2399999999998, idle=1376294.9399999999, iowait=40.539999999999999, irq=0.01, softirq=24.239999999999998), cputimes(user=35990.419999999998, nice=0.20000000000000001, system=13513.059999999999, idle=1338291.54, iowait=431.29000000000002, irq=95.420000000000002, softirq=1756.3499999999999), cputimes(user=23382.98, nice=0.080000000000000002, system=9391.4300000000003, idle=1356101.8899999999, iowait=102.27, irq=48.829999999999998, softirq=1050.73), cputimes(user=36171.690000000002, nice=0.28999999999999998, system=13764.790000000001, idle=1337939.1399999999, iowait=383.88, irq=91.719999999999999, softirq=1726.6199999999999), cputimes(user=9241.1200000000008, nice=0.070000000000000007, system=5088.5100000000002, idle=1375672.72, iowait=36.68, irq=0.01, softirq=38.950000000000003), cputimes(user=35656.849999999999, nice=0.089999999999999997, system=13522.209999999999, idle=1339042.3700000001, iowait=114.27, irq=84.890000000000001, softirq=1657.29), cputimes(user=17315.099999999999, nice=0.0, system=9599.6100000000006, idle=1362112.8, iowait=28.25, irq=224.88999999999999, softirq=797.25999999999999), cputimes(user=36109.360000000001, nice=0.070000000000000007, system=13855.99, idle=1338251.4299999999, iowait=105.06999999999999, irq=86.640000000000001, softirq=1669.28)][/quote]

[quote]>> psutil.cpu_times().user [size=16]# 获取CPU的但单项数据,如用户的CPU时间比[/size]
202673.82000000001[/quote]

[quote]>> psutil.cpu_count() [size=16]#获取cpu逻辑个数,默认logical=True ****注释如果你的psutil的版本不对的话可能没有cpu_count这个方法[/size][/quote]

8

[quote]>> psutil.cpu_count(logical=False) [size=16]#获取cpu的物理个数[/size][/quote]

12.内存信息
    Linux 系统的内存信息涉及total(内存总数)、used(已使用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)等,分别使用psutil.virtual_memory()与psutil.swap_memory()方法获取到这些信息。>>> mem = psutil.virtual_memory() #使用psutil.virtual_memory方法获取内存完整信息

[quote]>> mem[/quote]

svmem(total=8361156608L, available=5626871808L, percent=32.700000000000003, used=8166158336L, free=194998272L, active=2812674048, inactive=4402806784, buffers=290136064L, cached=5141737472)

[quote]>>[/quote]

[quote]>> mem.total/1024/1024 #获取内存总数[/quote]

7973L

[quote]>> mem.free/1024/1024 #获取内存空闲数[/quote]

185L

[quote]>> psutil.swap_memory() #获取swap分区信息[/quote]

sswap(total=8587182080L, used=143360L, free=8587038720L, percent=0.0, sin=0, sout=143360)3.磁盘信息
    在系统磁盘信息中我们比较关注的是磁盘的利用率和IO信息,其中磁盘利用率使用psutil.disk_usage方法获取。磁盘IO信息包括read_count(读IO数)、write_count(写IO数)、read_bytes(IO读字节数)、write_bytes(IO写字节数)、read_time(磁盘读时间)、write_time(磁盘写时间)等。这些IO信息可以使用psutil.disk_io_counters()获取。>>> psutil.disk_partitions() #使用psutil.disk_partions()获取磁盘完整信息

[sdiskpart(device=’/dev/sda2′, mountpoint=’/’, fstype=’ext3′, opts=’rw’), sdiskpart(device=’/dev/sda5′, mountpoint=’/data’, fstype=’ext3′, opts=’rw’), sdiskpart(device=’/dev/sda1′, mountpoint=’/boot’, fstype=’ext3′, opts=’rw’)]

[quote]>> psutil.disk_usage(‘/’) [size=16]使用disk_usage方法指定参数获取指定分区的使用情况。[/size][/quote]

sdiskusage(total=52005134336, used=3963228160, free=45357588480, percent=7.5999999999999996)

[quote]>> psutil.disk_usage(‘/data’) [size=16]使用disk_usage方法指定参数获取指定分区的使用情况。[/size][/quote]

sdiskusage(total=423282647040, used=32194187264, free=369240064000, percent=7.5999999999999996)

[quote]>> psutil.disk_io_counters() #使用psutil.disk_io_counters获取硬盘总的IO个数读写信息[/quote]

sdiskio(read_count=95397, write_count=3333898, read_bytes=1524504064, write_bytes=90824263168, read_time=256049, write_time=20039375)

[quote]>> psutil.disk_io_counters(perdisk=True) [size=16]”perdisk=True” 参数获取单个分区IO个数读写信息[/size][/quote]

{‘sda4′: sdiskio(read_count=5, write_count=0, read_bytes=5120, write_bytes=0, read_time=50, write_time=0), ‘sda5′: sdiskio(read_count=29679, write_count=1161203, read_bytes=594831360, write_bytes=46546737152, read_time=79547, write_time=12518375), ‘sda2′: sdiskio(read_count=65407, write_count=2172728, read_bytes=927507456, write_bytes=44279271424, read_time=175431, write_time=7521025), ‘sda3′: sdiskio(read_count=39, write_count=3, read_bytes=831488, write_bytes=143360, read_time=158, write_time=10), ‘sda1′: sdiskio(read_count=267, write_count=26, read_bytes=1328640, write_bytes=28160, read_time=863, write_time=32)}4.网络信息
    系统的网络信息和磁盘信息类似,涉及几个关键的点,包括bytes_sent(发送字节数)、bytes_recv(接受字节数)、packets_sent(发送数据包数)、packets_recv(接受数据包数)等。这些网络信息可以使用psutil.net_io_counters()方法获取。>>> psutil.net_io_counters() [size=16]使用psutil.net_io_counters获取到网络总的IO信息,默认pernic=False[/size]

snetio(bytes_sent=98373481869, bytes_recv=630483790117, packets_sent=869376956, packets_recv=894221315, errin=0, errout=0, dropin=0, dropout=0)

[quote]>> psutil.net_io_counters(pernic=True) [size=16]pernic=True,输出每个网络接口的IO信息[/size][/quote]

{‘lo': snetio(bytes_sent=1064059797, bytes_recv=1064059797, packets_sent=6473544, packets_recv=6473544, errin=0, errout=0, dropin=0, dropout=0), ‘sit0′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth3′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth2′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth1′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth0′: snetio(bytes_sent=97313244366, bytes_recv=629446229973, packets_sent=862937674, packets_recv=887781757, errin=0, errout=0, dropin=0, dropout=0)}5.其他一些系统信息
     除了前面介绍的几个获取系统的基本信息的方法,psutil模块还支持获取用户登录、开机时间信息>>> psutil.users() #使用psutil.users方法获取当前登陆用户的信息

[suser(name=’root’, terminal=’pts/0′, host=’111.206.162.94′, started=1417013248.0)]

[quote]>> psutil.boot_time() #使用psutil.boot_time方法获取开机时间,默认以linux时间戳返回[/quote]

1415455455.0

[quote]>> import datetime [size=16]#导入datetime模块,格式化时间戳,转换成自然时间格式[/size][/quote]

[quote]>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime(“%Y-%M-%d %H:%M:%S”)[/quote]

‘2014-04-08 22:04:15′

系统进程管理方法

 
    获取当前系统的进程信息,可以让运维得知当前应用程序的运行状态,包括进程的启动时间,查看或设置CPU亲和度,内存使用率,IO信息,socket链接,线程数等。这些信息可以呈现出指定进程是否存活,资源利用情况,为开发人员的代码优化,问题定位提供了很好的数据参考。
 
 1.进程信息
    psutil模块在获取进程信息方面也提供了很好的支持,包括使用psutil.pids()方法获取所有进程PID,使用psutil.Process()方法获取单个进程的名称、路径、状态、系统资源利用率等信息。>>> psutil.pids() #获取所有进程的PID

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 105, 116, 117, 118, 119 …… ]

[quote]>> p = psutil.Process(5926) #实例化一个Process对象,参数为一个进程PID[/quote]

[quote]>> p.name() #进程名[/quote]

‘httpd’

[quote]>> p.exe() #进程bin路径[/quote]

‘/usr/local/apache2/bin/httpd’

[quote]>> p.cwd() #进程工作绝对路径目录[/quote]

‘/data/www/crh/monitor’

[quote]>> p.status() #进程状态[/quote]

‘sleeping’

[quote]>> p.create_time() #进程创建时间,时间戳格式[/quote]

1417019136.6400001

[quote]>> p.uids() #进程uid信息[/quote]

puids(real=2, effective=2, saved=2)

[quote]>> p.gids() #进程gid信息[/quote]

pgids(real=2, effective=2, saved=2)

[quote]>> p.cpu_times() # 进程cpu时间信息[/quote]

pcputimes(user=0.68000000000000005, system=0.13)

[quote]>> p.memory_info() #进程内存利用率[/quote]

pmem(rss=9306112, vms=147357696)

[quote]>> p.io_counters() # 进程io信息,包括读写io数以及字节数[/quote]

pio(read_count=8390, write_count=1282, read_bytes=0, write_bytes=311296)

[quote]>> p.connections() #返回打开进程socket的namedutples列表[/quote]

[pconn(fd=3, family=10, type=1, laddr=(‘::’, 8001), raddr=(), status=’LISTEN’)]

[quote]>> p.num_threads() #进程开启线程数[/quote]

12.popen类的使用
    psutil提供的popen类的作用是获取用户启动应用程序的信息,以便跟踪程序进程的允许状态。>>> import psutil

[quote]>> from subprocess import PIPE[/quote]

[size=16]通过psutil的Popen方法启动应用程序,可以跟着应用程序的相关信息[/size]

[quote]>> p = psutil.Popen([“/usr/bin/python”, “-c”, “print (‘hello’)”], stdout=PIPE)[/quote]

[quote]>> p.name()[/quote]

‘python’

[quote]>> p.username()[/quote]

‘root’

[quote]>> p.communicate()[/quote]

(‘hello\n’, None)

[quote]>> p.cpu_times()[/quote]

pcputimes(user=0.02, system=0.060000000000000001) psutile更多方法参考:https://github.com/giampaolo/psutil

模块说明官网:http://pythonhosted.org/psutil/ 查看全部
py1.jpeg
   
     psutil是一个跨平台库(http://code.google.com/p/psutil/),能够轻松实现获取系统运行的进程和系统利用率(包括CPU 、内存、磁盘、网络等)信息,它主要应用于系统监控,分析和限制系统资源以及进程的管理。它可以实现等同于命令行工具提供的功能,如ps、top、lsof、netstat、ifconfig、who、df、kill、free、nice、ionice、iostat、iotop、uptime、pidof、tty、taskset、pmap等。目前支持32位和64位的Linux、Windows、OS X、FreeBSD和SunSolaris等操作系统,支持从2.4到3.4的python版本,目前最新版本为2.0.0。
 
    通常我们获取操作系统信息往往采用编写shell脚本来实现,如获取当前系统的物理内存总大小和使用大小,shell命令如下:
物理内存total值: free -m |grep Mem |awk ‘{print $2}’
物理内存used值:free -m |grep Mem | awk ‘{print $3}’
    相比较而言,使用psutil库实现起来就更加简单了。psutil大小单位一般采用字节(Byte),如下:
>>> import psutil
[quote]>> mem = psutil.virtual_memory()
>>> mem.total,mem.used
(8361156608L, 8215703552L)
转换成M为单位的话可以如下:
>>> print mem.total/1024/1024,mem.used/1024/1024
7973 7835


psutil的安装


    centos下:
[root@crh]#yum search python |grep psutil
python26-psutil.x86_64 : A process and system utilities module for Python
所以我只需要yum -y install python26-psutil 就可以了
    源码安装:
[root@crh]#wget https://pypi.python.org/packages/source/p/psutil/psutil-2.0.0.tar.gz
[root@crh]#tar zxf psutil-2.0.0.tar.gz
[root@crh]#cd psutil-2.0.0
[root@crh]#python setup.py install
安装完成后,进入到python交互模式你可以导入试试。。。。


获取系统性能信息


    采集系统的基本性能信息包括(cpu、内存、磁盘、网络等,可以完整描述当前系统的运行的状态以及质量。psutil模块已经封装好了这些方法,用户可以根据自身的应用场景,调用相应的方法来满足需求,非常简单实用,那我们就开始来学习吧。走起。。。。。
 
1.CPU信息
    Linux操作系统的CPU利用率主要有以下几个部分:
    []User Time, 执行用户进程的时间百分比;[/][]System Time,执行内核进程和中断的时间百分比;[/][]Wait IO, 由于IO等待而让CPU处于idle(空闲)状态的时间百分比;[/][]Idle, CPU处于idle状态的时间百分比。[/]

    我们使用Python的psutil.cpu_times()方法可以非常简单的获取到这些信息,同时也可以获取到CPU的硬件相关的信息,比如CPU的物理个数和逻辑个数,具体看下面的操作例子:
>>> import psutil
>>> psutil.cpu_times() [size=16]使用cpu_items方法获取CPU完整信息[/size]
cputimes(user=202656.94, nice=0.85999999999999999, system=83652.119999999995, idle=10823517.810000001, iowait=1242.27, irq=632.41999999999996, softirq=8720.3500000000004)[/quote]

[quote]>> psutil.cpu_times(percpu=True) #[size=16]#显示所有逻辑CPU的信息,指定percpu=True就好[/size]
[cputimes(user=8798.4200000000001, nice=0.029999999999999999, system=4920.2399999999998, idle=1376294.9399999999, iowait=40.539999999999999, irq=0.01, softirq=24.239999999999998), cputimes(user=35990.419999999998, nice=0.20000000000000001, system=13513.059999999999, idle=1338291.54, iowait=431.29000000000002, irq=95.420000000000002, softirq=1756.3499999999999), cputimes(user=23382.98, nice=0.080000000000000002, system=9391.4300000000003, idle=1356101.8899999999, iowait=102.27, irq=48.829999999999998, softirq=1050.73), cputimes(user=36171.690000000002, nice=0.28999999999999998, system=13764.790000000001, idle=1337939.1399999999, iowait=383.88, irq=91.719999999999999, softirq=1726.6199999999999), cputimes(user=9241.1200000000008, nice=0.070000000000000007, system=5088.5100000000002, idle=1375672.72, iowait=36.68, irq=0.01, softirq=38.950000000000003), cputimes(user=35656.849999999999, nice=0.089999999999999997, system=13522.209999999999, idle=1339042.3700000001, iowait=114.27, irq=84.890000000000001, softirq=1657.29), cputimes(user=17315.099999999999, nice=0.0, system=9599.6100000000006, idle=1362112.8, iowait=28.25, irq=224.88999999999999, softirq=797.25999999999999), cputimes(user=36109.360000000001, nice=0.070000000000000007, system=13855.99, idle=1338251.4299999999, iowait=105.06999999999999, irq=86.640000000000001, softirq=1669.28)][/quote]

[quote]>> psutil.cpu_times().user [size=16]# 获取CPU的但单项数据,如用户的CPU时间比[/size]
202673.82000000001[/quote]

[quote]>> psutil.cpu_count() [size=16]#获取cpu逻辑个数,默认logical=True ****注释如果你的psutil的版本不对的话可能没有cpu_count这个方法[/size][/quote]

8

[quote]>> psutil.cpu_count(logical=False) [size=16]#获取cpu的物理个数[/size][/quote]

1
2.内存信息
    Linux 系统的内存信息涉及total(内存总数)、used(已使用的内存数)、free(空闲内存数)、buffers(缓冲使用数)、cache(缓存使用数)、swap(交换分区使用数)等,分别使用psutil.virtual_memory()与psutil.swap_memory()方法获取到这些信息。
>>> mem = psutil.virtual_memory()  #使用psutil.virtual_memory方法获取内存完整信息

[quote]>> mem[/quote]

svmem(total=8361156608L, available=5626871808L, percent=32.700000000000003, used=8166158336L, free=194998272L, active=2812674048, inactive=4402806784, buffers=290136064L, cached=5141737472)

[quote]>>[/quote]

[quote]>> mem.total/1024/1024 #获取内存总数[/quote]

7973L

[quote]>> mem.free/1024/1024 #获取内存空闲数[/quote]

185L

[quote]>> psutil.swap_memory() #获取swap分区信息[/quote]

sswap(total=8587182080L, used=143360L, free=8587038720L, percent=0.0, sin=0, sout=143360)
3.磁盘信息
    在系统磁盘信息中我们比较关注的是磁盘的利用率和IO信息,其中磁盘利用率使用psutil.disk_usage方法获取。磁盘IO信息包括read_count(读IO数)、write_count(写IO数)、read_bytes(IO读字节数)、write_bytes(IO写字节数)、read_time(磁盘读时间)、write_time(磁盘写时间)等。这些IO信息可以使用psutil.disk_io_counters()获取。
>>> psutil.disk_partitions()        #使用psutil.disk_partions()获取磁盘完整信息

[sdiskpart(device=’/dev/sda2′, mountpoint=’/’, fstype=’ext3′, opts=’rw’), sdiskpart(device=’/dev/sda5′, mountpoint=’/data’, fstype=’ext3′, opts=’rw’), sdiskpart(device=’/dev/sda1′, mountpoint=’/boot’, fstype=’ext3′, opts=’rw’)]

[quote]>> psutil.disk_usage(‘/’) [size=16]使用disk_usage方法指定参数获取指定分区的使用情况。[/size][/quote]

sdiskusage(total=52005134336, used=3963228160, free=45357588480, percent=7.5999999999999996)

[quote]>> psutil.disk_usage(‘/data’) [size=16]使用disk_usage方法指定参数获取指定分区的使用情况。[/size][/quote]

sdiskusage(total=423282647040, used=32194187264, free=369240064000, percent=7.5999999999999996)

[quote]>> psutil.disk_io_counters() #使用psutil.disk_io_counters获取硬盘总的IO个数读写信息[/quote]

sdiskio(read_count=95397, write_count=3333898, read_bytes=1524504064, write_bytes=90824263168, read_time=256049, write_time=20039375)

[quote]>> psutil.disk_io_counters(perdisk=True) [size=16]”perdisk=True” 参数获取单个分区IO个数读写信息[/size][/quote]

{‘sda4′: sdiskio(read_count=5, write_count=0, read_bytes=5120, write_bytes=0, read_time=50, write_time=0), ‘sda5′: sdiskio(read_count=29679, write_count=1161203, read_bytes=594831360, write_bytes=46546737152, read_time=79547, write_time=12518375), ‘sda2′: sdiskio(read_count=65407, write_count=2172728, read_bytes=927507456, write_bytes=44279271424, read_time=175431, write_time=7521025), ‘sda3′: sdiskio(read_count=39, write_count=3, read_bytes=831488, write_bytes=143360, read_time=158, write_time=10), ‘sda1′: sdiskio(read_count=267, write_count=26, read_bytes=1328640, write_bytes=28160, read_time=863, write_time=32)}
4.网络信息
    系统的网络信息和磁盘信息类似,涉及几个关键的点,包括bytes_sent(发送字节数)、bytes_recv(接受字节数)、packets_sent(发送数据包数)、packets_recv(接受数据包数)等。这些网络信息可以使用psutil.net_io_counters()方法获取。
>>> psutil.net_io_counters()     [size=16]使用psutil.net_io_counters获取到网络总的IO信息,默认pernic=False[/size]

snetio(bytes_sent=98373481869, bytes_recv=630483790117, packets_sent=869376956, packets_recv=894221315, errin=0, errout=0, dropin=0, dropout=0)

[quote]>> psutil.net_io_counters(pernic=True) [size=16]pernic=True,输出每个网络接口的IO信息[/size][/quote]

{‘lo': snetio(bytes_sent=1064059797, bytes_recv=1064059797, packets_sent=6473544, packets_recv=6473544, errin=0, errout=0, dropin=0, dropout=0), ‘sit0′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth3′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth2′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth1′: snetio(bytes_sent=0, bytes_recv=0, packets_sent=0, packets_recv=0, errin=0, errout=0, dropin=0, dropout=0), ‘eth0′: snetio(bytes_sent=97313244366, bytes_recv=629446229973, packets_sent=862937674, packets_recv=887781757, errin=0, errout=0, dropin=0, dropout=0)}
5.其他一些系统信息
     除了前面介绍的几个获取系统的基本信息的方法,psutil模块还支持获取用户登录、开机时间信息
>>> psutil.users()    #使用psutil.users方法获取当前登陆用户的信息

[suser(name=’root’, terminal=’pts/0′, host=’111.206.162.94′, started=1417013248.0)]

[quote]>> psutil.boot_time() #使用psutil.boot_time方法获取开机时间,默认以linux时间戳返回[/quote]

1415455455.0

[quote]>> import datetime [size=16]#导入datetime模块,格式化时间戳,转换成自然时间格式[/size][/quote]

[quote]>> datetime.datetime.fromtimestamp(psutil.boot_time()).strftime(“%Y-%M-%d %H:%M:%S”)[/quote]

‘2014-04-08 22:04:15′


系统进程管理方法


 
    获取当前系统的进程信息,可以让运维得知当前应用程序的运行状态,包括进程的启动时间,查看或设置CPU亲和度,内存使用率,IO信息,socket链接,线程数等。这些信息可以呈现出指定进程是否存活,资源利用情况,为开发人员的代码优化,问题定位提供了很好的数据参考。
 
 1.进程信息
    psutil模块在获取进程信息方面也提供了很好的支持,包括使用psutil.pids()方法获取所有进程PID,使用psutil.Process()方法获取单个进程的名称、路径、状态、系统资源利用率等信息。
>>> psutil.pids()  #获取所有进程的PID

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 105, 116, 117, 118, 119 …… ]

[quote]>> p = psutil.Process(5926) #实例化一个Process对象,参数为一个进程PID[/quote]

[quote]>> p.name() #进程名[/quote]

‘httpd’

[quote]>> p.exe() #进程bin路径[/quote]

‘/usr/local/apache2/bin/httpd’

[quote]>> p.cwd() #进程工作绝对路径目录[/quote]

‘/data/www/crh/monitor’

[quote]>> p.status() #进程状态[/quote]

‘sleeping’

[quote]>> p.create_time() #进程创建时间,时间戳格式[/quote]

1417019136.6400001

[quote]>> p.uids() #进程uid信息[/quote]

puids(real=2, effective=2, saved=2)

[quote]>> p.gids() #进程gid信息[/quote]

pgids(real=2, effective=2, saved=2)

[quote]>> p.cpu_times() # 进程cpu时间信息[/quote]

pcputimes(user=0.68000000000000005, system=0.13)

[quote]>> p.memory_info() #进程内存利用率[/quote]

pmem(rss=9306112, vms=147357696)

[quote]>> p.io_counters() # 进程io信息,包括读写io数以及字节数[/quote]

pio(read_count=8390, write_count=1282, read_bytes=0, write_bytes=311296)

[quote]>> p.connections() #返回打开进程socket的namedutples列表[/quote]

[pconn(fd=3, family=10, type=1, laddr=(‘::’, 8001), raddr=(), status=’LISTEN’)]

[quote]>> p.num_threads() #进程开启线程数[/quote]

1
2.popen类的使用
    psutil提供的popen类的作用是获取用户启动应用程序的信息,以便跟踪程序进程的允许状态。
>>> import psutil

[quote]>> from subprocess import PIPE[/quote]

[size=16]通过psutil的Popen方法启动应用程序,可以跟着应用程序的相关信息[/size]

[quote]>> p = psutil.Popen([“/usr/bin/python”, “-c”, “print (‘hello’)”], stdout=PIPE)[/quote]

[quote]>> p.name()[/quote]

‘python’

[quote]>> p.username()[/quote]

‘root’

[quote]>> p.communicate()[/quote]

(‘hello\n’, None)

[quote]>> p.cpu_times()[/quote]

pcputimes(user=0.02, system=0.060000000000000001)
 psutile更多方法参考:
https://github.com/giampaolo/psutil

模块说明官网:http://pythonhosted.org/psutil/


elasticsearch中文分词插件IK使用

大数据/云计算采菊篱下 发表了文章 • 0 个评论 • 1594 次浏览 • 2015-09-21 11:40 • 来自相关话题

ES支持中文的前提是安装正确的分词组件,比如elasticsearch-analysis-ik。
版本支持如下:





安装

# git clone https://github.com/medcl/elasticsearch-analysis-ik.git --depth 1
# cd elasticsearch-analysis-ik/
# mvn package
# unzip ./target/releases/elasticsearch-analysis-ik-1.2.9.zip
OR# git clone https://github.com/medcl/elasticsearch-analysis-ik
# cd elasticsearch-analysis-ik
# mvn compile
# mvn package
# plugin --install analysis-ik --url file:///#{project_path}/elasticsearch-analysis-ik/target/releases/elasticsearch-analysis-ik-1.3.0.zipzip解压得到5个jar包:
[]- elasticsearch-analysis-ik-1.2.9.jar[/][]- httpclient-4.3.5.jar[/][]- httpcore-4.3.2.jar[/][]- commons-logging-1.1.3.jar[/][]- commons-codec-1.6.jar[/]
 
返回ES目录,新建路径./plugins/analysis-ik并把上述jar包全部移进去。
第二步,把elasticsearch-analysis-ik/config/ik文件夹(IK自带的词典)复制到ES目录的./config路径下。
第三步,在./config/elasticsearch.yml文件的最后加上:index:
analysis:
analyzer:
ik:
alias: [news_analyzer_ik,ik_analyzer]
type: org.elasticsearch.index.analysis.IkAnalyzerProvider

index.analysis.analyzer.default.type : "ik"
OR[b]index.analysis.analyzer.ik.type : "ik"[/b]注意配置分词组件必须在创建索引之前,否则是无效的。

Example

1.create a index# curl -XPUT http://localhost:9200/index2.create a mapping# curl -XPUT http://localhost:9200/index
create a mapping
curl -XPOST http://localhost:9200/index/fulltext/_mapping -d'
{
"fulltext": {
"_all": {
"indexAnalyzer": "ik",
"searchAnalyzer": "ik",
"term_vector": "no",
"store": "false"
},
"properties": {
"content": {
"type": "string",
"store": "no",
"term_vector": "with_positions_offsets",
"indexAnalyzer": "ik",
"searchAnalyzer": "ik",
"include_in_all": "true",
"boost": 8
}
}
}
}'3.index some docs# curl -XPOST http://localhost:9200/index/fulltext/1 -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'# curl -XPOST http://localhost:9200/index/fulltext/2 -d'
{"content":"公安部:各地校车将享最高路权"}
'# curl -XPOST http://localhost:9200/index/fulltext/3 -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
' # curl -XPOST http://localhost:9200/index/fulltext/4 -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
'4.query with highlighting# curl -XPOST http://localhost:9200/index/fulltext/_search -d'
{
"query" : { "term" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
'Result{
"took": 14,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 2,
"hits": [
{
"_index": "index",
"_type": "fulltext",
"_id": "4",
"_score": 2,
"_source": {
"content": "中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"
},
"highlight": {
"content": [
"<tag1>中国</tag1>驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首 "
]
}
},
{
"_index": "index",
"_type": "fulltext",
"_id": "3",
"_score": 2,
"_source": {
"content": "中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"
},
"highlight": {
"content": [
"均每天扣1艘<tag1>中国</tag1>渔船 "
]
}
}
]
}
} 查看全部
eslogo.png

ES支持中文的前提是安装正确的分词组件,比如elasticsearch-analysis-ik
版本支持如下:
ik1.png


安装


# git clone https://github.com/medcl/elasticsearch-analysis-ik.git --depth 1
# cd elasticsearch-analysis-ik/
# mvn package
# unzip ./target/releases/elasticsearch-analysis-ik-1.2.9.zip

OR
# git clone https://github.com/medcl/elasticsearch-analysis-ik
# cd elasticsearch-analysis-ik
# mvn compile
# mvn package
# plugin --install analysis-ik --url file:///#{project_path}/elasticsearch-analysis-ik/target/releases/elasticsearch-analysis-ik-1.3.0.zip
zip解压得到5个jar包:
    []- elasticsearch-analysis-ik-1.2.9.jar[/][]- httpclient-4.3.5.jar[/][]- httpcore-4.3.2.jar[/][]- commons-logging-1.1.3.jar[/][]- commons-codec-1.6.jar[/]

 
返回ES目录,新建路径./plugins/analysis-ik并把上述jar包全部移进去。
第二步,把elasticsearch-analysis-ik/config/ik文件夹(IK自带的词典)复制到ES目录的./config路径下。
第三步,在./config/elasticsearch.yml文件的最后加上:
index:
analysis:
analyzer:
ik:
alias: [news_analyzer_ik,ik_analyzer]
type: org.elasticsearch.index.analysis.IkAnalyzerProvider

index.analysis.analyzer.default.type : "ik"

OR
[b]index.analysis.analyzer.ik.type : "ik"[/b]
注意配置分词组件必须在创建索引之前,否则是无效的。


Example


1.create a index
# curl -XPUT http://localhost:9200/index
2.create a mapping
# curl -XPUT http://localhost:9200/index
create a mapping
curl -XPOST http://localhost:9200/index/fulltext/_mapping -d'
{
"fulltext": {
"_all": {
"indexAnalyzer": "ik",
"searchAnalyzer": "ik",
"term_vector": "no",
"store": "false"
},
"properties": {
"content": {
"type": "string",
"store": "no",
"term_vector": "with_positions_offsets",
"indexAnalyzer": "ik",
"searchAnalyzer": "ik",
"include_in_all": "true",
"boost": 8
}
}
}
}'
3.index some docs
# curl -XPOST http://localhost:9200/index/fulltext/1 -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'
# curl -XPOST http://localhost:9200/index/fulltext/2 -d'
{"content":"公安部:各地校车将享最高路权"}
'
# curl -XPOST http://localhost:9200/index/fulltext/3 -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
# curl -XPOST http://localhost:9200/index/fulltext/4 -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
'
4.query with highlighting
# curl -XPOST http://localhost:9200/index/fulltext/_search  -d'
{
"query" : { "term" : { "content" : "中国" }},
"highlight" : {
"pre_tags" : ["<tag1>", "<tag2>"],
"post_tags" : ["</tag1>", "</tag2>"],
"fields" : {
"content" : {}
}
}
}
'
Result
{
"took": 14,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 2,
"hits": [
{
"_index": "index",
"_type": "fulltext",
"_id": "4",
"_score": 2,
"_source": {
"content": "中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"
},
"highlight": {
"content": [
"<tag1>中国</tag1>驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首 "
]
}
},
{
"_index": "index",
"_type": "fulltext",
"_id": "3",
"_score": 2,
"_source": {
"content": "中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"
},
"highlight": {
"content": [
"均每天扣1艘<tag1>中国</tag1>渔船 "
]
}
}
]
}
}

Elasticsearch索引存储类型

大数据/云计算采菊篱下 发表了文章 • 0 个评论 • 2347 次浏览 • 2015-09-20 16:59 • 来自相关话题

文件系统存储类型
    基于文件系统的存储是默认索引存储方式。有不同的实现或存储类型。最好的一个操作系统的自动选择是:mmapfs使用在Windows的64bit系统上,simplefs使用在windows的32bit系统上,除此之外默认是用(hybrid niofs 和 mmapfs)。
 
    你可以通过修改配置文件elasticsearch.yml来指定存储类型:index.store.type: niofs    当然你也可以在创建索引的时候指定:curl -XPUT localhost:9200/my_index -d '{
"settings": {
"index.store.type": "niofs"
}
}';    下面是所有支持的不同存储类型:

Simple FS(简单文件系统)

Simplefs类型是一个简单的实现随机访问文件的文件存储系统(映射到Lucene SimpleFsDirectory的)。该实现的并发性能较差(多线程是个瓶颈)。当你需要将索引持久化,最好使用niofs。

NIO FS(NIO文件系统)

niofs类型是通过NIO将分片索引文件写到文件系统上(映射到Lucene NIOFSDirectory)。它允许多线程同时读取文件。不建议在Windows系统上使用,由于SUN JAVA实现上的一个错误。

MMap FS(内存映射文件系统)

mmapfs类型存储分片索引到文件系统上(映射到Lucene MMapDirectory)通过映射文件到内存中(MMAP)。内存映射的过程中将划分出与被映射文件大小一样的虚拟内存空间。使用这个类之前,请确保您有足够的虚拟地址空间。Linux下虚拟内存设置:
# sysctl -w vm.max_map_count=262144
永久生效:
update the vm.max_map_count setting in /etc/sysctl.conf.
# echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p

Hybrid MMap / NIO FS

默认类型存储碎片索引在文件系统中根据不同的文件类型的文件映射到内存(mmap)或使用Java NIO。目前只Lucene术语字典和doc值文件内存映射到减少对操作系统的影响。所有其他文件都使用Lucene NIOFSDirectory打开。
内存
    内存类型索引存储在主内存,使用Lucene的RamIndexStore。
    
    也有节点级别的设置来控制高速缓存(重要的,当使用直接缓冲区):




参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html#store-memory
           https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html#file-descriptors 查看全部
eslogo.png


文件系统存储类型
    基于文件系统的存储是默认索引存储方式。有不同的实现或存储类型。最好的一个操作系统的自动选择是:mmapfs使用在Windows的64bit系统上,simplefs使用在windows的32bit系统上,除此之外默认是用(hybrid niofs 和 mmapfs)。
 
    你可以通过修改配置文件elasticsearch.yml来指定存储类型:
index.store.type: niofs
    当然你也可以在创建索引的时候指定:
curl -XPUT localhost:9200/my_index -d '{
"settings": {
"index.store.type": "niofs"
}
}';
    下面是所有支持的不同存储类型:


Simple FS(简单文件系统)


Simplefs类型是一个简单的实现随机访问文件的文件存储系统(映射到Lucene SimpleFsDirectory的)。该实现的并发性能较差(多线程是个瓶颈)。当你需要将索引持久化,最好使用niofs。


NIO FS(NIO文件系统)


niofs类型是通过NIO将分片索引文件写到文件系统上(映射到Lucene NIOFSDirectory)。它允许多线程同时读取文件。不建议在Windows系统上使用,由于SUN JAVA实现上的一个错误。


MMap FS(内存映射文件系统)


mmapfs类型存储分片索引到文件系统上(映射到Lucene MMapDirectory)通过映射文件到内存中(MMAP)。内存映射的过程中将划分出与被映射文件大小一样的虚拟内存空间。使用这个类之前,请确保您有足够的虚拟地址空间。
Linux下虚拟内存设置:
# sysctl -w vm.max_map_count=262144
永久生效:
update the vm.max_map_count setting in /etc/sysctl.conf.
# echo "vm.max_map_count=262144" >> /etc/sysctl.conf && sysctl -p


Hybrid MMap / NIO FS


默认类型存储碎片索引在文件系统中根据不同的文件类型的文件映射到内存(mmap)或使用Java NIO。目前只Lucene术语字典和doc值文件内存映射到减少对操作系统的影响。所有其他文件都使用Lucene NIOFSDirectory打开。

内存
    内存类型索引存储在主内存,使用Lucene的RamIndexStore。
    
    也有节点级别的设置来控制高速缓存(重要的,当使用直接缓冲区):
estore.png

参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules-store.html#store-memory
           https://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html#file-descriptors

Apache Couldn't start ErrorLog process

运维技术Geek小A 回复了问题 • 2 人关注 • 2 个回复 • 1380 次浏览 • 2015-09-20 12:39 • 来自相关话题

mysql的ERROR 2006 (HY000): MySQL server has gone away错误分析

数据库Ansible 发表了文章 • 0 个评论 • 675 次浏览 • 2015-09-19 20:43 • 来自相关话题

MySQL下当我导入一个比较大的SQL文件时出现了ERROR 2006 (HY000): MySQL server has gone away错误,具体情况如下:> ll *.sql
-rwxr-xr-x@ 1 bohan staff 27M Mar 26 18:08 91620_all.sql

[quote] mysql test < 91620_all.sql
ERROR 2006 (HY000) at line 17128: MySQL server has gone away上面可以看到,文件大小为27M导入的时候会报这个错误。
 
错误原因

If you are using the mysql client program, its default max_allowed_packet variable is 16MB. To set a larger value, start mysql like this:

shell> mysql --max_allowed_packet=32M

That sets the packet size to 32MB.

我们通过MySQL相关文档可以发现默认大小是16M。
 
解决方法
所有大于16M的SQL文件都会报这个错误,我们可以直接通过命令后增加--max_allowed_packet=32M解决或者登录MySQL客户端,修改系统变量:> ssh mysql
mysql> set GLOBAL max_allowed_packet=32[i]1024[/i]1024;我们也可以通过修改MySQL配置my.cnf文件,在最后一行增加max_allowed_packet=32M就可以了
 
MySQL配置文件的位置:Windows下 C:\ProgamData\MySQL\MySQL Server5.6
Linux下 /etc/mysql
Mac下通过brew安装 /usr/local/Cellar/mysql/5.6.23原文地址:开源技术社区分享[/quote] 查看全部
MySQL下当我导入一个比较大的SQL文件时出现了ERROR 2006 (HY000): MySQL server has gone away错误,具体情况如下:
>  ll *.sql
-rwxr-xr-x@ 1 bohan staff 27M Mar 26 18:08 91620_all.sql

[quote] mysql test < 91620_all.sql
ERROR 2006 (HY000) at line 17128: MySQL server has gone away
上面可以看到,文件大小为27M导入的时候会报这个错误。
 
错误原因


If you are using the mysql client program, its default max_allowed_packet variable is 16MB. To set a larger value, start mysql like this:


shell> mysql --max_allowed_packet=32M


That sets the packet size to 32MB.


我们通过MySQL相关文档可以发现默认大小是16M。
 
解决方法
所有大于16M的SQL文件都会报这个错误,我们可以直接通过命令后增加--max_allowed_packet=32M解决或者登录MySQL客户端,修改系统变量:
> ssh mysql
mysql> set GLOBAL max_allowed_packet=32[i]1024[/i]1024;
我们也可以通过修改MySQL配置my.cnf文件,在最后一行增加max_allowed_packet=32M就可以了
 
MySQL配置文件的位置:
Windows下 C:\ProgamData\MySQL\MySQL Server5.6
Linux下 /etc/mysql
Mac下通过brew安装 /usr/local/Cellar/mysql/5.6.23
原文地址:开源技术社区分享[/quote]

docker怎么让nginx访问我指定的目录

大数据/云计算koyo 回复了问题 • 2 人关注 • 1 个回复 • 1935 次浏览 • 2015-09-19 20:26 • 来自相关话题

R语言学习文档资料大全

学习资源OpenSkill 发表了文章 • 0 个评论 • 752 次浏览 • 2015-09-19 17:12 • 来自相关话题

    现在对R语言感兴趣人的人越来越多,很多人都想快速掌握R语言,然而,由于现在大部分学校没有开设R语言课程,社会上相对培训R语言的机构也较少,导致很多人不知道如何着手学习R语言。

    所以这次开源技术社区给大家分享一份R语言资料,希望对你有帮助!
    文档资料下载地址:http://pan.baidu.com/s/1pJwzUxP
 
    开源技术社区QQ群号:372476089  欢迎加入互相学习
    扫码关注微信号: 查看全部
    现在对R语言感兴趣人的人越来越多,很多人都想快速掌握R语言,然而,由于现在大部分学校没有开设R语言课程,社会上相对培训R语言的机构也较少,导致很多人不知道如何着手学习R语言。

    所以这次开源技术社区给大家分享一份R语言资料,希望对你有帮助!
    文档资料下载地址:http://pan.baidu.com/s/1pJwzUxP
 
    开源技术社区QQ群号:372476089  欢迎加入互相学习
    扫码关注微信号:
opsk.jpg