사용되는 반환 소금 Returners- 작업 결과 데이터는 방법과 사용자 정의 개발

RETURNERS

기본적으로 명령은 소금 부하에 값이 소금 마스터로 돌아갑니다 돌려 보내진다, 그러나 우리는 또한 많은 다른 방법이 데이터의 결과를 사용할 수 있습니다.

소금 기 returner을 사용하여 얻어진 데이터는 추가적인 분석 및 보관을 위해 외부 데이터 스토리지 서비스로 리디렉션 될 수있다.

자신의 구성 소금 부하로부터 추출 된 정보 및 프로그램이 시작될 때 구성 정보를로드하기위한 유일한 지원 Returners.

Returners 인터페이스는 데이터를 수신 할 수있는 시스템으로 데이터를 반환 할 수 있습니다. 이 서버 레디 스, MongoDB를 서버, MySQL 서버, 또는 시스템에 데이터를 반환 할 수 있음을 의미합니다.

더 returners는 참조 내장 returners의 전체 목록

RETURNERS를 사용

모든 소금 명령을 다시 마스터 결과 데이터를 명령 할 것이다. 지정 returners 데이터는 기 returner로 지정된 인터페이스로 전송됩니다합니다.

당신이 명령을 호출 할 때 사용하는 returners을 지정합니다 :

salt '*' test.version --return redis_return

이 명령은 redis_return의 기 returner에 결과 데이터를 저장합니다.

당신은 동시에 여러 returners를 지정할 수 있습니다 :

salt '*' test.version --return mongo_return,redis_return,cassandra_return

이 경우, 세 개의 통화 returners 및 명령 데이터를 전송하는 이들 test.version.

기 returner를 기록하기

Returners 솔트는 소금 마스터 이외의 대상에 재 결과 데이터를 지원하는 모듈이다.

RETURNERS 쓰기 쉽게!

소금 기 returner은 간단 작성합니다.

기 returner 파이썬 적어도 하나 개 포함하는 모듈로서 return기능한다. 다른 옵션 기능은 사용 지원하기 위해 포함 할 수있다 master_job_cache를 , 외부 스토리지 시스템 작업 결과이벤트 Returners의 기능을합니다.

기 returner

returner기능은 하나의 매개 변수에 동의해야합니다. 매개 변수는 미니언 함수의 반환 데이터를 호출이 포함되어 있습니다. 당신이 함수 미니언을 호출하는 경우 test.version, 매개 변수의 값은 사전 유형이 될 것입니다. 소금 마스터의 사례는 사전 형식 매개 변수를 얻기 위해 다음 명령을 실행합니다 :

salt-call --local --metadata test.version --out=pprint
import redis
import salt.utils.json

def returner(ret):
    '''
    Return information to a redis server
    '''
    # Get a redis connection
    serv = redis.Redis(
        host='redis-serv.example.com',
        port=6379,
        db='0')
    serv.sadd("%(id)s:jobs" % ret, ret['jid'])
    serv.set("%(jid)s:%(id)s" % ret, salt.utils.json.dumps(ret['return']))
    serv.sadd('jobs', ret['jid'])
    serv.sadd(ret['jid'], ret['id'])

기 returner는 서버로 데이터를 전송하는 레디 스 위에 배치하고, 레디 스의 JSON로 데이터 시퀀스를 기록한다.

커스텀 기 returner 모듈을 사용하여

지정된 마스터 구성 파일에 사용자 정의 returners file_roots에서 _returners/디렉토리.

다음 함수를 호출 할 때, 사용자 정의 returners 작업을 배포 트리거 :

모든 returners이 같은 정의에 기본 이름 소금 미니언에 동기화되어 returners, returners은 기본적으로 같은 이름으로 대체됩니다.

기 returner 이름 지정

기 returner의 기본 이름은 파일 이름이 있습니다 (즉, 귀환 푸 될 foo.py),하지만 당신은 사용할 수있는 가상 의 이름을 커버하는 기능. 좋은 예가 될 수있다 레디 스는 기 returner 발견하고는 이름이 redis_return.py단순히으로, redis이름을로드 :

try:
    import redis
    HAS_REDIS = True
except ImportError:
    HAS_REDIS = False

__virtualname__ = 'redis'

def __virtual__():
    if not HAS_REDIS:
        return False
    return __virtualname__

MASTER JOB 캐시 지원

master_job_cache는 , 외부 시스템에서 작업의 결과를 저장 하고, 이벤트 Returners . 소금 master_job_cache기능을 사용할 기본 데이터 작업 캐시 플러그 구성 요소로 returners 소금을 할 수 있습니다. 이 기능을 지원하기 위해, 기 returner 모듈은 다음과 같은 기능을 기능을 구현해야합니다 :

주 : 다음의 예는 코드 부분이 cassandra_cql의 기 returner에서 얻어진 사용.

prep_jid

pass_jid하지 않는 한, 그렇지 않으면 작업 ID (JID)가 충돌하지 않는지 확인하십시오.

nocache캐시 데이터를 반환할지 여부를 나타내는 선택적 부울 값입니다. pass_jid발신자 제공 JID인가, 무조건 반환해야합니다.

def prep_jid(nocache, passed_jid=None):  # pylint: disable=unused-argument
    '''
    Do any work necessary to prepare a JID, including sending a custom id
    '''
    return passed_jid if passed_jid is not None else salt.utils.jid.gen_jid()

save_load

작업 정보를 저장합니다. 세대, 작업에 대한 고유 식별자로 볼 수 있습니다. 예를 들어, 그것은 데이터베이스 기본 / 고유 키로 사용할 수 있습니다. 그것은 소금 마스터의 미니언에 의해 부하에 반환됩니다. 이것은 어떤 작업에 대한 목표 부하 노드입니다. 다음 코드 예제 것이다 저장된 문자열로 데이터를 변환 테이블.jidprep_jidjidloadminionsloadsalt.jids

import salt.utils.json

def save_load(jid, load, minions=None):
    '''
    Save the load to the specified jid id
    '''
    query = '''INSERT INTO salt.jids (
                 jid, load
               ) VALUES (
                 '{0}', '{1}'
               );'''.format(jid, salt.utils.json.dumps(load))

    # cassandra_cql.cql_query may raise a CommandExecutionError
    try:
        __salt__['cassandra_cql.cql_query'](query)
    except CommandExecutionError:
        log.critical('Could not save load in jids table.')
        raise
    except Exception as e:
        log.critical(
            'Unexpected error while inserting into jids: {0}'.format(e)
        )
        raise

get_load

매개 변수가 작업 ID (JID)이어야 프로세스가 사용하는 반환 save_load쿼리가 빈 사전에 반환하지 않는 경우, 저장된 연산 결과 데이터를.

def get_load(jid):
    '''
    Return the load data that marks a specified jid
    '''
    query = '''SELECT load FROM salt.jids WHERE jid = '{0}';'''.format(jid)

    ret = {}

    # cassandra_cql.cql_query may raise a CommandExecutionError
    try:
        data = __salt__['cassandra_cql.cql_query'](query)
        if data:
            load = data[0].get('load')
            if load:
                ret = json.loads(load)
    except CommandExecutionError:
        log.critical('Could not get load from jids table.')
        raise
    except Exception as e:
        log.critical('''Unexpected error while getting load from
         jids: {0}'''.format(str(e)))
        raise

    return ret

외부 작업 캐시 지원

사용하여 the master_job_cache이 확장 모듈을 채용 서비스에 외부 기억 장치로 데이터를 초래할 수있다. 당신이 기 returner 지원 연결하려면 External Job Cache위 달성의 필요성에 더하여, 기능을 Master Job Cache support세 가지 기능에서을뿐만 아니라 추가의 필요성은 다음과 같은 네 가지 기능을 구현 :

get_jid

양식 사전에 작업 ID를 지정 연산 결과 데이터를 반환합니다.

예를 들면 :

{
    "local": {
        "master_minion": {
            "fun_args": [],
            "jid": "20150330121011408195",
            "return": "2018.3.4",
            "retcode": 0,
            "success": true,
            "cmd": "_return",
            "_stamp": "2015-03-30T12:10:12.708663",
            "fun": "test.version",
            "id": "master_minion"
        }
    }
}

get_fun

부하는 소금 마지막 함수 호출을 사전을 같이 주어진 기능으로 돌아갑니다.

견본:

{
    "local": {
        "minion1": "test.version",
        "minion3": "test.version",
        "minion2": "test.version"
    }
}


**get_jids**

返回一个包含了所有job ids的列表。

Sample:
```json
{
    "local": [
        "20150330121011408195",
        "20150330195922139916"
    ]
}

get_minions

부하의리스트를 돌려줍니다.

견본:

{
     "local": [
         "minion3",
         "minion2",
         "minion1",
         "master_minion"
     ]
}

당신은 추가 설명이 필요한 경우, 하나 이상의이 returners (예를 들어 MySQL의 또는 cassandra_cql)에서 달성 된 참조하시기 바랍니다.

이벤트 지원

당신은해야한다 event_return기 returner에 의해 마스터에서 기록 된 이벤트 정보를 허용하는 기 returner 모듈에 기능을 추가 할 수 있습니다. 이 함수에 전달 마스터 서버 이벤트 목록입니다.

다음 예제는 MySQL의 기 returner에서 가져옵니다. 이 예에서, 각각의 이벤트는 이벤트 삽입 salt_events테이블에 기초하고 있기 때문에, 테이블의 event tag기본 키, JID를 포함하는 라벨, 상기 이벤트 레코드의 유일성을 보장 할 수있다.

import salt.utils.json

def event_return(events):
 '''
 Return event to mysql server

 Requires that configuration be enabled via 'event_return'
 option in master config.
 '''
 with _get_serv(events, commit=True) as cur:
     for event in events:
         tag = event.get('tag', '')
         data = event.get('data', '')
         sql = '''INSERT INTO `salt_events` (`tag`, `data`, `master_id` )
                  VALUES (%s, %s, %s)'''
         cur.execute(sql, (tag, salt.utils.json.dumps(data), __opts__['id']))

기 returner를 테스트하기

Returner,prep_jid,save_load,get_load和event_return기능은 마스터 구성 파일에서 구성 할 수 있습니다 master_job_cache이벤트 Returners 각 미니언 호출의 마스터에서 다음과 test.version테스트.

마스터 작업 캐시 기능 검사의 성공적인 구현 한 후에는 계속 사용할 수 있습니다 ret모듈 테스트를 수행하는 External Job Cache기능.

salt-call ret.get_jids cassandra_cql --output=json
salt-call ret.get_fun cassandra_cql test.version --output=json
salt-call ret.get_minions cassandra_cql --output=json
salt-call ret.get_jid cassandra_cql 20150330121011408195 --output=json

이벤트 RETURNERS

권력 이벤트 역사 소금 인프라를 극대화하기 위해, 소금 마스터는 모든 이벤트는 하나 returners의 이상으로 기록 할 수 얻을 수 있습니다.

이벤트 로깅을 사용하려면 마스터 구성 설정 event_return기 returner (들)로 지정해야 이벤트에 대한 핸들러로 돌아갑니다 구성 옵션을 선택합니다.

참고 : 모든 returners 이벤트 기록을 지원합니다. 여부를 확인하기 위해 기 returner를 사용하기 전에 event_return()기능.

참고 : 대규모 배포에서 매초마다 당신이 바쁜 마스터에서 수백 개의 이벤트를 생성 할 수 있습니다. 소금은 쉽게 동시 서버 데이터를 반환 수천 성능의 부족을 압도 할 수 있기 때문에,주의 주어진 기 returner 저장 장치를 지불해야합니다.

RETURNERS는 플러그인 목록

플러그인 이름 기능 설명
carbon_return 소금에서 데이터를 가지고 탄소 수신기로 "를 반환"
cassandra_cql_return 카산드라 서버에 데이터를 반환
cassandra_return 카산드라 ColumnFamily에 데이터를 반환
couchbase_return 카우치베이스 주식회사에 대한 간단한 기 returner.
couchdb_return CouchDB를위한 간단한 기 returner.
django_return 장고의 신호 시스템을 사용하여 반환 사용할 수 있습니다 장고 시스템을 통보하는 기 returner.
elasticsearch_return 색인에 대한 elasticsearch 서버에 데이터를 돌려줍니다.
etcd_return etcd 서버 나 클러스터에 데이터를 반환
highstate_return HTML 전자 메일 또는 HTML 파일을 통해 highstate (또는 호환 가능한 형식으로 데이터를 반환하는 모든 다른 주 기능)의 결과를 돌려줍니다.
hipchat_return hipchat를 통해 소금 데이터를 돌려줍니다.
influxdb_return influxdb 서버에 데이터를 돌려줍니다.
kafka_return 카프카 주제로 데이터를 반환
librato_return 소금 기 returner는 Librato에 highstate 통계를 반환
노동 조합 지부 로컬 기 returner가 기 returner 인터페이스를 테스트하는 데 사용되는, 단지 제대로 전달되고 있는지 확인하기 위해 본체에 반환 데이터를 인쇄
local_cache 로컬 작업 캐시에 데이터를 반환
mattermost_returner mattermost를 통해 소금 데이터를 반환
memcache_return memcache 실행 서버에 데이터를 반환
mongo_future_return MongoDB를 서버에 데이터를 반환
mongo_return MongoDB를 서버에 데이터를 반환
multi_returner 읽기 / 여러 returners 쓰기
MySQL은 MySQL 서버에 데이터를 반환
nagios_nrdp_return Nagios의 소금 데이터를 반환
ODBC 는 ODBC 호환 서버에 데이터를 돌려줍니다.
pgjsonb JSON 데이터는 대학원의 jsonb 데이터 형식에 저장된와 PostgreSQL 서버에 데이터를 반환
포스트 그레스 PostgreSQL의 서버에 데이터를 반환
postgres_local_cache 마스터 작업 캐시에 대한 PostgreSQL 서버를 사용합니다.
pushover_returner 만만한를 통해 소금 데이터를 돌려줍니다 ( http://www.pushover.net )
rawfile_json 소금에서 데이터를 가지고 이벤트 당 하나 개의 라인과 함께 JSON을 포함하는 원시 파일로 "반환".
redis_return 레디 스 서버에 데이터를 반환
sentry_return 보초 다시 실행 결과를보고 소금 기 returner.
slack_returner 여유를 통해 소금 데이터를 반환
sms_return SMS에 의해 데이터를 돌려줍니다.
smtp_return 이메일을 통해 소금 데이터를 반환
인 Splunk 는 HTTP 이벤트 수집기를 통해 인 Splunk에 JSON 응답 데이터를 보내기 설정 또는 기둥에 지정하려면 다음 설정 값을 필요
sqlite3_return sqlite3를 데이터베이스로 미니언 반환 데이터를 삽입
syslog_return 호스트 운영 체제의 syslog 기능에 데이터를 반환
telegram_return 전보를 통해 소금 데이터를 돌려줍니다.
xmpp_return XMPP를 통해 소금 데이터를 반환
zabbix_return Zabbix에 소금 데이터를 반환

추천

출처blog.csdn.net/watermelonbig/article/details/90634759